1 /********************************************************************\
2 * BitlBee -- An IRC to other IM-networks gateway *
4 * Copyright 2002-2004 Wilmer van der Gaast and others *
5 \********************************************************************/
7 /* Questions to the user (mainly authorization requests from IM) */
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License with
21 the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
22 if not, write to the Free Software Foundation, Inc., 59 Temple Place,
23 Suite 330, Boston, MA 02111-1307 USA
29 static void query_display( irc_t
*irc
, query_t
*q
);
30 static query_t
*query_default( irc_t
*irc
);
32 query_t
*query_add( irc_t
*irc
, struct im_connection
*ic
, char *question
,
33 query_callback yes
, query_callback no
, query_callback free
,
36 query_t
*q
= g_new0( query_t
, 1 );
39 q
->question
= g_strdup( question
);
45 if( strchr( irc
->umode
, 'b' ) != NULL
)
49 /* At least for the machine-parseable version, get rid of
50 newlines to make "parsing" easier. */
51 for( s
= q
->question
; *s
; s
++ )
52 if( *s
== '\r' || *s
== '\n' )
58 query_t
*l
= irc
->queries
;
60 while( l
->next
) l
= l
->next
;
68 if( g_strcasecmp( set_getstr( &irc
->b
->set
, "query_order" ), "lifo" ) == 0 || irc
->queries
== q
)
69 query_display( irc
, q
);
74 void query_del( irc_t
*irc
, query_t
*q
)
78 if( irc
->queries
== q
)
80 irc
->queries
= q
->next
;
84 for( l
= irc
->queries
; l
; l
= l
->next
)
94 return; /* Hrmmm... */
97 g_free( q
->question
);
98 if( q
->free
&& q
->data
)
103 void query_del_by_conn( irc_t
*irc
, struct im_connection
*ic
)
105 query_t
*q
, *n
, *def
;
112 def
= query_default( irc
);
131 imcb_log( ic
, "Flushed %d unanswered question(s) for this connection.", count
);
133 q
= query_default( irc
);
135 query_display( irc
, q
);
138 void query_answer( irc_t
*irc
, query_t
*q
, int ans
)
144 q
= query_default( irc
);
150 imcb_log( q
->ic
, "Accepted: %s", q
->question
);
152 irc_rootmsg( irc
, "Accepted: %s", q
->question
);
159 imcb_log( q
->ic
, "Rejected: %s", q
->question
);
161 irc_rootmsg( irc
, "Rejected: %s", q
->question
);
169 if( disp
&& ( q
= query_default( irc
) ) )
170 query_display( irc
, q
);
173 static void query_display( irc_t
*irc
, query_t
*q
)
177 imcb_log( q
->ic
, "New request: %s\nYou can use the \2yes\2/\2no\2 commands to accept/reject this request.", q
->question
);
181 irc_rootmsg( irc
, "New request: %s\nYou can use the \2yes\2/\2no\2 commands to accept/reject this request.", q
->question
);
185 static query_t
*query_default( irc_t
*irc
)
189 if( g_strcasecmp( set_getstr( &irc
->b
->set
, "query_order" ), "fifo" ) == 0 )
192 for( q
= irc
->queries
; q
&& q
->next
; q
= q
->next
);