/* radare - LGPL - Copyright 2011-2015 - pancake */ #include #include static char *r_socket_http_answer (RSocket *s, int *code, int *rlen) { const char *p; int ret, olen, len = 0, bufsz = 32768, delta = 0; char *dn, *res, *buf = malloc (bufsz+32); // XXX: use r_buffer here r_socket_block_time (s, 1, 5); res = NULL; olen = r_socket_read_block (s, (unsigned char*) buf, bufsz); if (olen < 1) goto fail; buf[olen] = 0; if ((dn = (char*)r_str_casestr (buf, "\n\n"))) { delta += 2; } else if ((dn = (char*)r_str_casestr (buf, "\r\n\r\n"))) { delta += 4; } else goto fail; olen -= delta; *dn = 0; // chop headers /* Parse Len */ p = r_str_casestr (buf, "Content-Length: "); if (p) len = atoi (p+16); else len = olen - (dn - buf); if (len >0) { if (len > olen) { res = malloc (len+2); memcpy (res, dn+delta, olen); do { ret = r_socket_read_block (s, (ut8*) res+olen, len-olen); if (ret < 1) break; olen += ret; } while (olen