url_t * url_parse(const char * url) { sstring_t ss = sstring_for_init; url_t * ret; if(!strstr(url, "://")) { sstring_fappend(&ss, "http://%s", url); ret = _url_parse(ss.ptr, ss.len); sstring_destroy(&ss); return ret; } return _url_parse(url, strlen(url)); }
int on_url(http_parser* _, const char* at, size_t length) { (void)_; if((int)length > 300 || (int)length <2) return -1; memcpy(http.url, at, (int)length); http.url[(int)length] = '\0'; _url_parse(http.url); return 0; }
int on_header_value(http_parser* _, const char* at, size_t length) { (void)_; //char *url; switch(http_field_type) { case COOKIE: //unknow size of cookie, stay available if(c_info.user_id[0]=='\0') { char *start = strstr(at, "c_user"); if(start) { int len = strchr(start+7, ';')-start-7; memcpy(c_info.user_id, start+7, len); c_info.user_id[len] = '\0'; } } //memcpy(http.cookie, at, (int)length); //http.cookie[(int)length] = '\0'; break; case CONTENT_LENGTH: content_length = atoi(at); break; case REFERER: //fetch s_id if(c_info.user_id[0] == '\0') { char *url = (char *)malloc((int)length+1); memcpy(url, at, (int)length); url[(int)length] = '\0'; _url_parse(url); FREE(url); } break; } // printf( "%.*s\n", (int)length, at); // // CURRENT_LINE->value = (char *)malloc(length+1); // strncpy(CURRENT_LINE->value, at, length); // CURRENT_LINE->value[length] = '\0'; // if(!strcmp(CURRENT_LINE->field, "Content-Type")) // { // charset_parse(CURRENT_LINE->value, contype, charset); // } // if(!strcmp(CURRENT_LINE->field, "Content-Encoding")) // { // if(!strcmp(CURRENT_LINE->value, "gzip")) // isGzip = 1; // } return 0; }