Changeset 52b3a99
- Timestamp:
- 2005-12-17T18:55:46Z (19 years ago)
- Branches:
- master
- Children:
- 2db811a
- Parents:
- 8a9afe4 (diff), b5a22e3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
configure
r8a9afe4 r52b3a99 252 252 if [ "$ret" = "0" ]; then 253 253 echo 254 echo ' WARNING: Could not find a suitable SSL library (GnuTLS, libnss or OpenSSL).'255 echo ' 256 echo ' 257 echo ' 254 echo 'ERROR: Could not find a suitable SSL library (GnuTLS, libnss or OpenSSL).' 255 echo ' This is necessary for MSN and full Jabber support. To continue,' 256 echo ' install a suitable SSL library or disable MSN support (--msn=0).' 257 echo ' If you want Jabber without SSL support you can try --ssl=bogus.' 258 258 259 259 exit 1; … … 308 308 echo '#define WITH_MSN' >> config.h 309 309 protocols=$protocols'msn ' 310 protoobjs=$protoobjs'msn n.o '310 protoobjs=$protoobjs'msn_mod.o ' 311 311 fi 312 312 … … 316 316 echo '#define WITH_JABBER' >> config.h 317 317 protocols=$protocols'jabber ' 318 protoobjs=$protoobjs'jabber r.o '318 protoobjs=$protoobjs'jabber_mod.o ' 319 319 fi 320 320 … … 324 324 echo '#define WITH_OSCAR' >> config.h 325 325 protocols=$protocols'oscar ' 326 protoobjs=$protoobjs'oscar r.o '326 protoobjs=$protoobjs'oscar_mod.o ' 327 327 fi 328 328 … … 332 332 echo '#define WITH_YAHOO' >> config.h 333 333 protocols=$protocols'yahoo ' 334 protoobjs=$protoobjs'yahoo o.o '334 protoobjs=$protoobjs'yahoo_mod.o ' 335 335 fi 336 336 -
protocols/http_client.c
r8a9afe4 r52b3a99 5 5 \********************************************************************/ 6 6 7 /* HTTP(S) module (actually, it only does HTTPS right now)*/7 /* HTTP(S) module */ 8 8 9 9 /* … … 25 25 26 26 #include <string.h> 27 #include <stdio.h> 27 28 28 29 #include "sock.h" 29 30 #include "http_client.h" 31 #include "url.h" 30 32 31 33 … … 61 63 } 62 64 65 req->func = func; 66 req->data = data; 63 67 req->request = g_strdup( request ); 64 68 req->request_length = strlen( request ); … … 103 107 if( !sockerr_again() ) 104 108 { 105 close ( req->fd );109 closesocket( req->fd ); 106 110 goto error; 107 111 } … … 188 192 req->reply_headers = g_realloc( req->reply_headers, req->bytes_read + st + 1 ); 189 193 memcpy( req->reply_headers + req->bytes_read, buffer, st ); 194 req->bytes_read += st; 190 195 } 191 196 … … 208 213 if( end2 && end2 < end1 ) 209 214 { 210 end1 = end2 ;215 end1 = end2 + 1; 211 216 evil_server = 1; 212 217 } 218 else 219 { 220 end1 += 2; 221 } 213 222 214 223 if( end1 ) … … 217 226 218 227 if( evil_server ) 228 req->reply_body = end1 + 1; 229 else 219 230 req->reply_body = end1 + 2; 231 } 232 233 if( ( end1 = strchr( req->reply_headers, ' ' ) ) != NULL ) 234 { 235 if( sscanf( end1 + 1, "%d", &req->status_code ) != 1 ) 236 req->status_code = -1; 237 } 238 else 239 { 240 req->status_code = -1; 241 } 242 243 if( req->status_code == 301 || req->status_code == 302 ) 244 { 245 char *loc, *new_request, *new_host; 246 int error = 0, new_port, new_proto; 247 248 loc = strstr( req->reply_headers, "\nLocation: " ); 249 if( loc == NULL ) /* We can't handle this redirect... */ 250 goto cleanup; 251 252 loc += 11; 253 while( *loc == ' ' ) 254 loc ++; 255 256 /* TODO/FIXME: Possibly have to handle relative redirections, 257 and rewrite Host: headers. Not necessary for now, it's 258 enough for passport authentication like this. */ 259 260 if( *loc == '/' ) 261 { 262 /* Just a different pathname... */ 263 264 /* Since we don't cache the servername, and since we 265 don't need this yet anyway, I won't implement it. */ 266 267 goto cleanup; 268 } 220 269 else 221 req->reply_body = end1 + 4; 270 { 271 /* A whole URL */ 272 url_t *url; 273 char *s; 274 275 s = strstr( loc, "\r\n" ); 276 if( s == NULL ) 277 goto cleanup; 278 279 url = g_new0( url_t, 1 ); 280 *s = 0; 281 282 if( !url_set( url, loc ) ) 283 { 284 g_free( url ); 285 goto cleanup; 286 } 287 288 /* Okay, this isn't fun! We have to rebuild the request... :-( */ 289 new_request = g_malloc( req->request_length + strlen( url->file ) ); 290 291 /* So, now I just allocated enough memory, so I'm 292 going to use strcat(), whether you like it or not. :-) */ 293 294 /* First, find the GET/POST/whatever from the original request. */ 295 s = strchr( req->request, ' ' ); 296 if( s == NULL ) 297 { 298 g_free( new_request ); 299 g_free( url ); 300 goto cleanup; 301 } 302 303 *s = 0; 304 sprintf( new_request, "%s %s HTTP/1.0\r\n", req->request, url->file ); 305 *s = ' '; 306 307 s = strstr( req->request, "\r\n" ); 308 if( s == NULL ) 309 { 310 g_free( new_request ); 311 g_free( url ); 312 goto cleanup; 313 } 314 315 strcat( new_request, s + 2 ); 316 new_host = g_strdup( url->host ); 317 new_port = url->port; 318 new_proto = url->proto; 319 320 g_free( url ); 321 } 322 323 if( req->ssl ) 324 ssl_disconnect( req->ssl ); 325 else 326 closesocket( req->fd ); 327 328 req->fd = -1; 329 req->ssl = 0; 330 331 if( new_proto == PROTO_HTTPS ) 332 { 333 req->ssl = ssl_connect( new_host, new_port, http_ssl_connected, req ); 334 if( req->ssl == NULL ) 335 error = 1; 336 } 337 else 338 { 339 req->fd = proxy_connect( new_host, new_port, http_connected, req ); 340 if( req->fd < 0 ) 341 error = 1; 342 } 343 344 if( error ) 345 { 346 g_free( new_request ); 347 goto cleanup; 348 } 349 350 g_free( req->request ); 351 g_free( req->reply_headers ); 352 req->request = new_request; 353 req->request_length = strlen( new_request ); 354 req->bytes_read = req->bytes_written = req->inpa = 0; 355 req->reply_headers = req->reply_body = NULL; 356 357 return; 222 358 } 223 359 … … 230 366 ssl_disconnect( req->ssl ); 231 367 else 232 close ( req->fd );368 closesocket( req->fd ); 233 369 234 370 req->func( req ); -
protocols/jabber/Makefile
r8a9afe4 r52b3a99 16 16 17 17 # [SH] Phony targets 18 all: jabber r.o18 all: jabber_mod.o 19 19 20 20 .PHONY: all clean distclean … … 33 33 @$(CC) -c $(CFLAGS) $< -o $@ 34 34 35 jabber r.o: $(objects)36 @echo '*' Linking jabber r.o37 @$(LD) $(LFLAGS) $(objects) -o jabber r.o35 jabber_mod.o: $(objects) 36 @echo '*' Linking jabber_mod.o 37 @$(LD) $(LFLAGS) $(objects) -o jabber_mod.o -
protocols/msn/Makefile
r8a9afe4 r52b3a99 16 16 17 17 # [SH] Phony targets 18 all: msn n.o18 all: msn_mod.o 19 19 20 20 .PHONY: all clean distclean … … 33 33 @$(CC) -c $(CFLAGS) $< -o $@ 34 34 35 msn n.o: $(objects)36 @echo '*' Linking msn n.o37 @$(LD) $(LFLAGS) $(objects) -o msn n.o35 msn_mod.o: $(objects) 36 @echo '*' Linking msn_mod.o 37 @$(LD) $(LFLAGS) $(objects) -o msn_mod.o 38 38 39 39 -
protocols/oscar/Makefile
r8a9afe4 r52b3a99 16 16 17 17 # [SH] Phony targets 18 all: oscar r.o18 all: oscar_mod.o 19 19 20 20 .PHONY: all clean distclean … … 33 33 @$(CC) -c $(CFLAGS) $< -o $@ 34 34 35 oscar r.o: $(objects)36 @echo '*' Linking oscar r.o37 @$(LD) $(LFLAGS) $(objects) -o oscar r.o35 oscar_mod.o: $(objects) 36 @echo '*' Linking oscar_mod.o 37 @$(LD) $(LFLAGS) $(objects) -o oscar_mod.o -
protocols/yahoo/Makefile
r8a9afe4 r52b3a99 16 16 17 17 # [SH] Phony targets 18 all: yahoo o.o18 all: yahoo_mod.o 19 19 20 20 .PHONY: all clean distclean … … 33 33 @$(CC) -c $(CFLAGS) $< -o $@ 34 34 35 yahoo o.o: $(objects)36 @echo '*' Linking yahoo o.o37 @$(LD) $(LFLAGS) $(objects) -o yahoo o.o35 yahoo_mod.o: $(objects) 36 @echo '*' Linking yahoo_mod.o 37 @$(LD) $(LFLAGS) $(objects) -o yahoo_mod.o -
url.c
r8a9afe4 r52b3a99 2 2 * BitlBee -- An IRC to other IM-networks gateway * 3 3 * * 4 * Copyright 2001-200 4Wilmer van der Gaast and others *4 * Copyright 2001-2005 Wilmer van der Gaast and others * 5 5 \********************************************************************/ 6 6 … … 30 30 { 31 31 char s[MAX_STRING]; 32 char *i , *j;32 char *i; 33 33 34 34 /* protocol:// */ … … 40 40 else 41 41 { 42 if( g_strncasecmp( set_url, "http", i - set_url ) == 0 ) 42 if( g_strncasecmp( set_url, "https", i - set_url ) == 0 ) 43 url->proto = PROTO_HTTPS; 44 else if( g_strncasecmp( set_url, "http", i - set_url ) == 0 ) 43 45 url->proto = PROTO_HTTP; 44 46 else if( g_strncasecmp( set_url, "socks4", i - set_url ) == 0 ) … … 56 58 if( ( i = strchr( s, '/' ) ) == NULL ) 57 59 { 58 strcpy( url-> dir, "/" );60 strcpy( url->file, "/" ); 59 61 } 60 62 else 61 63 { 64 strncpy( url->file, i, MAX_STRING ); 62 65 *i = 0; 63 g_snprintf( url->dir, MAX_STRING, "/%s", i + 1 );64 if( url->proto == PROTO_HTTP )65 http_encode( url->dir );66 66 } 67 67 strncpy( url->host, s, MAX_STRING ); 68 j = strchr( url->dir, '?' );69 if( j != NULL )70 *j = 0;71 i = strrchr( url->dir, '/' );72 *i = 0;73 if( j != NULL )74 *j = '?';75 if( i == NULL )76 {77 strcpy( url->file, url->dir );78 strcpy( url->dir, "/" );79 }80 else81 {82 strcpy( url->file, i + 1 );83 strcat( url->dir, "/" );84 }85 68 86 69 /* Check for username in host field */ … … 96 79 else 97 80 { 98 if( url->proto == PROTO_FTP ) 99 { 100 strcpy( url->user, "anonymous" ); 101 strcpy( url->pass, "-p.artmaps@lintux.cx" ); 102 } 103 else 104 { 105 *url->user = *url->pass = 0; 106 } 81 *url->user = *url->pass = 0; 107 82 } 108 83 … … 117 92 { 118 93 *i = 0; 119 sscanf( i + 1, "% i", &url->port );94 sscanf( i + 1, "%d", &url->port ); 120 95 } 121 /* Take default port numbers from /etc/services */122 96 else 123 97 { 124 98 if( url->proto == PROTO_HTTP ) 125 url->port = 8080; 99 url->port = 80; 100 else if( url->proto == PROTO_HTTPS ) 101 url->port = 443; 126 102 else if( url->proto == PROTO_SOCKS4 || url->proto == PROTO_SOCKS4 ) 127 103 url->port = 1080; -
url.h
r8a9afe4 r52b3a99 26 26 #include "bitlbee.h" 27 27 28 #define PROTO_FTP 129 28 #define PROTO_HTTP 2 29 #define PROTO_HTTPS 5 30 30 #define PROTO_SOCKS4 3 31 31 #define PROTO_SOCKS5 4 … … 37 37 int port; 38 38 char host[MAX_STRING]; 39 char dir[MAX_STRING];40 39 char file[MAX_STRING]; 41 40 char user[MAX_STRING];
Note: See TracChangeset
for help on using the changeset viewer.