comparison libpurple/proxy.c @ 17652:5bb6dcba5e4f

propagate from branch 'im.pidgin.pidgin' (head bdd3cb040100fe925456b862d03cc6c5a61648ef) to branch 'org.maemo.garage.pidgin.smiley-install' (head 619530ecef0838dc85b081e0692ed145cc4b1bb0)
author Gabriel Schulhof <nix@go-nix.ca>
date Sat, 02 Jun 2007 07:33:10 +0000
parents 79ecaab86f91
children 57d350900136 941965d6fd88
comparison
equal deleted inserted replaced
17644:855a767cd9a9 17652:5bb6dcba5e4f
557 http_canread(gpointer data, gint source, PurpleInputCondition cond) 557 http_canread(gpointer data, gint source, PurpleInputCondition cond)
558 { 558 {
559 int len, headers_len, status = 0; 559 int len, headers_len, status = 0;
560 gboolean error; 560 gboolean error;
561 PurpleProxyConnectData *connect_data = data; 561 PurpleProxyConnectData *connect_data = data;
562 guchar *p; 562 char *p;
563 gsize max_read; 563 gsize max_read;
564 564
565 if (connect_data->read_buffer == NULL) 565 if (connect_data->read_buffer == NULL)
566 { 566 {
567 connect_data->read_buf_len = 8192; 567 connect_data->read_buf_len = 8192;
568 connect_data->read_buffer = g_malloc(connect_data->read_buf_len); 568 connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
569 connect_data->read_len = 0; 569 connect_data->read_len = 0;
570 } 570 }
571 571
572 p = connect_data->read_buffer + connect_data->read_len; 572 p = (char *)connect_data->read_buffer + connect_data->read_len;
573 max_read = connect_data->read_buf_len - connect_data->read_len - 1; 573 max_read = connect_data->read_buf_len - connect_data->read_len - 1;
574 574
575 len = read(connect_data->fd, p, max_read); 575 len = read(connect_data->fd, p, max_read);
576 576
577 if (len == 0) 577 if (len == 0)
594 } 594 }
595 595
596 connect_data->read_len += len; 596 connect_data->read_len += len;
597 p[len] = '\0'; 597 p[len] = '\0';
598 598
599 p = (guchar *)g_strstr_len((const gchar *)connect_data->read_buffer, 599 p = g_strstr_len((const gchar *)connect_data->read_buffer,
600 connect_data->read_len, "\r\n\r\n"); 600 connect_data->read_len, "\r\n\r\n");
601 if (p != NULL) { 601 if (p != NULL) {
602 *p = '\0'; 602 *p = '\0';
603 headers_len = (p - connect_data->read_buffer) + 4; 603 headers_len = (p - (char *)connect_data->read_buffer) + 4;
604 } else if(len == max_read) 604 } else if(len == max_read)
605 headers_len = len; 605 headers_len = len;
606 else 606 else
607 return; 607 return;
608 608
609 error = strncmp((const char *)connect_data->read_buffer, "HTTP/", 5) != 0; 609 error = strncmp((const char *)connect_data->read_buffer, "HTTP/", 5) != 0;
610 if (!error) 610 if (!error)
611 { 611 {
612 int major; 612 int major;
613 p = connect_data->read_buffer + 5; 613 p = (char *)connect_data->read_buffer + 5;
614 major = strtol((const char *)p, (char**)&p, 10); 614 major = strtol(p, &p, 10);
615 error = (major == 0) || (*p != '.'); 615 error = (major == 0) || (*p != '.');
616 if(!error) { 616 if(!error) {
617 int minor; 617 int minor;
618 p++; 618 p++;
619 minor = strtol((const char *)p, (char **)&p, 10); 619 minor = strtol(p, &p, 10);
620 error = (*p != ' '); 620 error = (*p != ' ');
621 if(!error) { 621 if(!error) {
622 p++; 622 p++;
623 status = strtol((const char *)p, (char **)&p, 10); 623 status = strtol(p, &p, 10);
624 error = (*p != ' '); 624 error = (*p != ' ');
625 } 625 }
626 } 626 }
627 } 627 }
628 628
629 /* Read the contents */ 629 /* Read the contents */
630 p = (guchar *)g_strrstr((const gchar *)connect_data->read_buffer, "Content-Length: "); 630 p = g_strrstr((const gchar *)connect_data->read_buffer, "Content-Length: ");
631 if (p != NULL) 631 if (p != NULL)
632 { 632 {
633 gchar *tmp; 633 gchar *tmp;
634 int len = 0; 634 int len = 0;
635 char tmpc; 635 char tmpc;
636 p += strlen("Content-Length: "); 636 p += strlen("Content-Length: ");
637 tmp = strchr((const char *)p, '\r'); 637 tmp = strchr(p, '\r');
638 if(tmp) 638 if(tmp)
639 *tmp = '\0'; 639 *tmp = '\0';
640 len = atoi((const char *)p); 640 len = atoi(p);
641 if(tmp) 641 if(tmp)
642 *tmp = '\r'; 642 *tmp = '\r';
643 643
644 /* Compensate for what has already been read */ 644 /* Compensate for what has already been read */
645 len -= connect_data->read_len - headers_len; 645 len -= connect_data->read_len - headers_len;