Changes in / [4ff0966:cdca30b]
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
configure
r4ff0966 rcdca30b 169 169 fi 170 170 171 GLIB=0 172 171 173 if $PKG_CONFIG --version > /dev/null 2>/dev/null && $PKG_CONFIG glib-2.0; then 172 174 cat<<EOF>>Makefile.settings … … 174 176 CFLAGS+=`$PKG_CONFIG --cflags glib-2.0 gmodule-2.0` 175 177 EOF 176 else 177 echo 'Cannot find glib2 development libraries, aborting. (Install libglib2-dev?)' 178 echo '#define GLIB2' >> config.h 179 GLIB=2 180 elif type glib-config > /dev/null 2> /dev/null; then 181 cat<<EOF>>Makefile.settings 182 EFLAGS+=`glib-config --libs` 183 CFLAGS+=`glib-config --cflags` 184 EOF 185 echo '#define GLIB1' >> config.h 186 GLIB=1 187 else 188 echo 'Cannot find glib development libraries, aborting. (Install libglib-dev?)' 178 189 exit 1; 179 190 fi 191 192 if [ GLIB = 1 -o -r /usr/include/iconv.h ]; then 193 :; 194 elif [ -r /usr/local/include/iconv.h ]; then 195 echo CFLAGS+=-I/usr/local/include >> Makefile.settings 196 else 197 echo 198 echo 'Warning: Could not find iconv.h, you might have to install it and/or modify' 199 echo 'Makefile.settings to tell where this file is.' 200 fi 201 180 202 181 203 if [ "$events" = "libevent" ]; then … … 201 223 fi 202 224 echo 'EVENT_HANDLER=events_'$events'.o' >> Makefile.settings 225 203 226 204 227 detect_gnutls() … … 397 420 ;; 398 421 *BSD ) 399 ;; 400 Darwin ) 401 ;; 402 IRIX ) 422 echo 'EFLAGS+=-liconv' >> Makefile.settings; 403 423 ;; 404 424 SunOS ) 405 425 echo 'EFLAGS+=-lresolv -lnsl -lsocket' >> Makefile.settings 406 426 echo 'STRIP=\# skip strip' >> Makefile.settings 427 echo 'EFLAGS+=-liconv' >> Makefile.settings; 428 ;; 429 Darwin ) 430 echo 'EFLAGS+=-liconv' >> Makefile.settings; 431 ;; 432 IRIX ) 407 433 ;; 408 434 CYGWIN* ) -
doc/README
r4ff0966 rcdca30b 47 47 48 48 BitlBee's only real dependency is GLib. This is available on virtually every 49 platform. Any recent version of GLib ( 2.0 or higher) will work.49 platform. Any recent version of GLib (including 1.x versions) will work. 50 50 51 51 These days, MSN Messenger clients have to connect to the MS Passport servers -
irc_commands.c
r4ff0966 rcdca30b 321 321 { 322 322 user_t *u; 323 char buff[IRC_MAX_LINE] , *s;323 char buff[IRC_MAX_LINE]; 324 324 int lenleft, i; 325 325 … … 331 331 for( i = 1; cmd[i]; i ++ ) 332 332 { 333 char *this, *next; 334 335 this = cmd[i]; 336 while( *this ) 337 { 338 if( ( next = strchr( this, ' ' ) ) ) 339 *next = 0; 340 341 if( ( u = user_find( irc, this ) ) && u->online ) 342 { 343 lenleft -= strlen( u->nick ) + 1; 344 345 if( lenleft < 0 ) 346 break; 347 348 strcat( buff, u->nick ); 349 strcat( buff, " " ); 350 } 351 352 if( next ) 353 { 354 *next = ' '; 355 this = next + 1; 356 } 357 else 333 if( ( u = user_find( irc, cmd[i] ) ) && u->online ) 334 { 335 /* [SH] Make sure we don't use too much buffer space. */ 336 lenleft -= strlen( u->nick ) + 1; 337 338 if( lenleft < 0 ) 358 339 { 359 340 break; 360 } 361 } 362 363 /* *sigh* */ 364 if( lenleft < 0 ) 365 break; 366 } 367 341 } 342 343 /* [SH] Add the nick to the buffer. Note 344 * that an extra space is always added. Even 345 * if it's the last nick in the list. Who 346 * cares? 347 */ 348 349 strcat( buff, u->nick ); 350 strcat( buff, " " ); 351 } 352 } 353 354 /* [WvG] Well, maybe someone cares, so why not remove it? */ 368 355 if( strlen( buff ) > 0 ) 369 356 buff[strlen(buff)-1] = '\0'; -
protocols/http_client.c
r4ff0966 rcdca30b 157 157 158 158 error: 159 req->status_string = g_strdup( "Error while writing HTTP request" );160 161 159 req->func( req ); 162 160 … … 218 216 if( !sockerr_again() ) 219 217 { 220 req->status_string = g_strdup( strerror( errno ) );221 218 goto cleanup; 222 219 } … … 246 243 support... */ 247 244 if( req->bytes_read == 0 ) 248 {249 req->status_string = g_strdup( "Empty HTTP reply" );250 245 goto cleanup; 251 }252 246 253 247 /* Zero termination is very convenient. */ … … 270 264 else 271 265 { 272 req->status_string = g_strdup( "Malformed HTTP reply" );273 266 goto cleanup; 274 267 } … … 286 279 { 287 280 if( sscanf( end1 + 1, "%d", &req->status_code ) != 1 ) 288 {289 req->status_string = g_strdup( "Can't parse status code" );290 281 req->status_code = -1; 291 } 292 else 293 { 294 char *eol; 295 296 if( evil_server ) 297 eol = strchr( end1, '\n' ); 298 else 299 eol = strchr( end1, '\r' ); 300 301 req->status_string = g_strndup( end1 + 1, eol - end1 - 1 ); 302 303 /* Just to be sure... */ 304 if( ( eol = strchr( req->status_string, '\r' ) ) ) 305 *eol = 0; 306 if( ( eol = strchr( req->status_string, '\n' ) ) ) 307 *eol = 0; 308 } 309 } 310 else 311 { 312 req->status_string = g_strdup( "Can't locate status code" ); 282 } 283 else 284 { 313 285 req->status_code = -1; 314 286 } … … 319 291 int error = 0, new_port, new_proto; 320 292 321 /* We might fill it again, so let's not leak any memory. */322 g_free( req->status_string );323 req->status_string = NULL;324 325 293 loc = strstr( req->reply_headers, "\nLocation: " ); 326 294 if( loc == NULL ) /* We can't handle this redirect... */ 327 {328 req->status_string = g_strdup( "Can't locate Location: header" );329 295 goto cleanup; 330 }331 296 332 297 loc += 11; … … 345 310 don't need this yet anyway, I won't implement it. */ 346 311 347 req->status_string = g_strdup( "Can't handle recursive redirects" );348 349 312 goto cleanup; 350 313 } … … 364 327 if( !url_set( url, loc ) ) 365 328 { 366 req->status_string = g_strdup( "Malformed redirect URL" );367 329 g_free( url ); 368 330 goto cleanup; … … 375 337 going to use strcat(), whether you like it or not. :-) */ 376 338 377 sprintf( new_request, "GET %s HTTP/1.0", url->file ); 378 379 s = strstr( req->request, "\r\n" ); 339 /* First, find the GET/POST/whatever from the original request. */ 340 s = strchr( req->request, ' ' ); 380 341 if( s == NULL ) 381 342 { 382 req->status_string = g_strdup( "Error while rebuilding request string" );383 343 g_free( new_request ); 384 344 g_free( url ); … … 386 346 } 387 347 388 strcat( new_request, s ); 348 *s = 0; 349 sprintf( new_request, "%s %s HTTP/1.0\r\n", req->request, url->file ); 350 *s = ' '; 351 352 s = strstr( req->request, "\r\n" ); 353 if( s == NULL ) 354 { 355 g_free( new_request ); 356 g_free( url ); 357 goto cleanup; 358 } 359 360 strcat( new_request, s + 2 ); 389 361 new_host = g_strdup( url->host ); 390 362 new_port = url->port; … … 400 372 401 373 req->fd = -1; 402 req->ssl = NULL;374 req->ssl = 0; 403 375 404 376 if( new_proto == PROTO_HTTPS ) … … 418 390 if( error ) 419 391 { 420 req->status_string = g_strdup( "Connection problem during redirect" );421 392 g_free( new_request ); 422 393 goto cleanup; … … 447 418 g_free( req->request ); 448 419 g_free( req->reply_headers ); 449 g_free( req->status_string );450 420 g_free( req ); 451 421 -
protocols/http_client.h
r4ff0966 rcdca30b 37 37 int request_length; 38 38 int status_code; 39 char *status_string;40 39 char *reply_headers; 41 40 char *reply_body; -
protocols/msn/ns.c
r4ff0966 rcdca30b 656 656 if( key == NULL ) 657 657 { 658 char *err; 659 660 err = g_strdup_printf( "Error during Passport authentication (%s)", 661 rep->error_string ? rep->error_string : "Unknown error" ); 662 663 hide_login_progress( gc, err ); 658 hide_login_progress( gc, "Error during Passport authentication" ); 664 659 signoff( gc ); 665 666 g_free( err );667 660 } 668 661 else -
protocols/msn/passport.c
r4ff0966 rcdca30b 69 69 } 70 70 71 reqs = g_strdup_printf( "GET %s HTTP/1.0\r\n%s\r\n\r\n", dummy, header ); 71 reqs = g_malloc( strlen( header ) + strlen( dummy ) + 128 ); 72 sprintf( reqs, "GET %s HTTP/1.0\r\n%s\r\n\r\n", dummy, header ); 72 73 73 74 *dummy = 0; … … 87 88 struct passport_reply *rep = req->data; 88 89 89 if( !g_slist_find( msn_connections, rep->data ) )90 if( !g_slist_find( msn_connections, rep->data ) || !req->finished || !req->reply_headers ) 90 91 { 91 92 destroy_reply( rep ); … … 93 94 } 94 95 95 if( req-> finished && req->reply_headers && req->status_code == 200 )96 if( req->status_code == 200 ) 96 97 { 97 98 char *dummy; … … 108 109 rep->result = g_strdup( dummy ); 109 110 } 110 else111 {112 rep->error_string = g_strdup( "Could not parse Passport server response" );113 }114 }115 else116 {117 rep->error_string = g_strdup_printf( "HTTP error: %s",118 req->status_string ? req->status_string : "Unknown error" );119 111 } 120 112 … … 153 145 } 154 146 147 #define PPR_REQUEST "GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n" 155 148 static int passport_retrieve_dalogin( gpointer func, gpointer data, char *header ) 156 149 { … … 162 155 rep->header = header; 163 156 164 req = http_dorequest _url( "https://nexus.passport.com/rdr/pprdr.asp", passport_retrieve_dalogin_ready, rep );157 req = http_dorequest( "nexus.passport.com", 443, 1, PPR_REQUEST, passport_retrieve_dalogin_ready, rep ); 165 158 166 159 if( !req ) … … 176 169 char *urlend; 177 170 178 if( !g_slist_find( msn_connections, rep->data ) )171 if( !g_slist_find( msn_connections, rep->data ) || !req->finished || !req->reply_headers ) 179 172 { 180 173 destroy_reply( rep ); … … 182 175 } 183 176 184 if( !req->finished || !req->reply_headers || req->status_code != 200 ) 185 { 186 rep->error_string = g_strdup_printf( "HTTP error while fetching DALogin: %s", 187 req->status_string ? req->status_string : "Unknown error" ); 177 dalogin = strstr( req->reply_headers, "DALogin=" ); 178 179 if( !dalogin ) 188 180 goto failure; 189 }190 191 dalogin = strstr( req->reply_headers, "DALogin=" );192 193 if( !dalogin )194 {195 rep->error_string = g_strdup( "Parse error while fetching DALogin" );196 goto failure;197 }198 181 199 182 dalogin += strlen( "DALogin=" ); … … 225 208 g_free( rep->result ); 226 209 g_free( rep->header ); 227 g_free( rep->error_string );228 210 g_free( rep ); 229 211 } -
protocols/msn/passport.h
r4ff0966 rcdca30b 39 39 char *result; 40 40 char *header; 41 char *error_string;42 41 }; 43 42 -
protocols/msn/sb.c
r4ff0966 rcdca30b 529 529 { 530 530 msn_sb_destroy( sb ); 531 return 0;532 } 533 elseif( err->flags & STATUS_FATAL )531 return( 0 ); 532 } 533 if( err->flags & STATUS_FATAL ) 534 534 { 535 535 signoff( gc ); 536 return 0;537 } 538 elseif( err->flags & STATUS_SB_IM_SPARE )536 return( 0 ); 537 } 538 if( err->flags & STATUS_SB_IM_SPARE ) 539 539 { 540 540 if( sb->who ) … … 559 559 sb->msgq = NULL; 560 560 } 561 562 /* Do NOT return 0 here, we want to keep this sb. */563 561 } 564 562 } -
protocols/msn/tables.c
r4ff0966 rcdca30b 127 127 128 128 { 910, "Server is busy", STATUS_FATAL }, 129 { 911, "Authentication failed", STATUS_ SB_FATAL | STATUS_FATAL },129 { 911, "Authentication failed", STATUS_FATAL }, 130 130 { 912, "Server is busy", STATUS_FATAL }, 131 131 { 913, "Not allowed when hiding", 0 }, -
util.c
r4ff0966 rcdca30b 39 39 #include <glib.h> 40 40 #include <time.h> 41 #ifdef GLIB2 42 #define iconv_t GIConv 43 #define iconv_open g_iconv_open 44 #define iconv_close g_iconv_close 45 #define iconv g_iconv 46 #else 47 #include <iconv.h> 48 #endif 41 49 42 50 void strip_linefeed(gchar *text) … … 457 465 signed int do_iconv( char *from_cs, char *to_cs, char *src, char *dst, size_t size, size_t maxbuf ) 458 466 { 459 GIConvcd;467 iconv_t cd; 460 468 size_t res; 461 469 size_t inbytesleft, outbytesleft; … … 463 471 char *outbuf = dst; 464 472 465 cd = g_iconv_open( to_cs, from_cs );466 if( cd == ( GIConv) -1 )473 cd = iconv_open( to_cs, from_cs ); 474 if( cd == (iconv_t) -1 ) 467 475 return( -1 ); 468 476 469 477 inbytesleft = size ? size : strlen( src ); 470 478 outbytesleft = maxbuf - 1; 471 res = g_iconv( cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft );479 res = iconv( cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft ); 472 480 *outbuf = '\0'; 473 g_iconv_close( cd );481 iconv_close( cd ); 474 482 475 483 if( res == (size_t) -1 ) … … 481 489 char *set_eval_charset( irc_t *irc, set_t *set, char *value ) 482 490 { 483 GIConvcd;491 iconv_t cd; 484 492 485 493 if ( g_strncasecmp( value, "none", 4 ) == 0 ) 486 494 return( value ); 487 495 488 cd = g_iconv_open( "UTF-8", value );489 if( cd == ( GIConv) -1 )496 cd = iconv_open( "UTF-8", value ); 497 if( cd == (iconv_t) -1 ) 490 498 return( NULL ); 491 499 492 g_iconv_close( cd );500 iconv_close( cd ); 493 501 return( value ); 494 502 }
Note: See TracChangeset
for help on using the changeset viewer.