int create_request(char *request,int len,Announce_list *node, unsigned short port,long long down,long long up, long long left,int numwant) { char encoded_info_hash[100]; char encoded_peer_id[100]; int key; char tracker_name[128]; unsigned short tracker_port; http_encode(info_hash,20,encoded_info_hash,100); http_encode(peer_id,20,encoded_peer_id,100); srand(time(NULL)); key = rand() / 10000; get_tracker_name(node,tracker_name,128); get_tracker_port(node,&tracker_port); sprintf(request, "GET /announce?info_hash=%s&peer_id=%s&port=%u" "&uploaded=%lld&downloaded=%lld&left=%lld" "&event=started&key=%d&compact=1&numwant=%d HTTP/1.0\r\n" "Host: %s\r\nUser-Agent: Bittorrent\r\nAccept: */*\r\n" "Accept-Encoding: gzip\r\nConnection: closed\r\n\r\n", encoded_info_hash,encoded_peer_id,port,up,down,left, key,numwant,tracker_name); #ifdef DEBUG printf("request:%s\n",request); #endif return 0; }
static char *twitter_url_append(char *url, char *key, char *value) { char *key_encoded = g_strndup(key, 3 * strlen(key)); http_encode(key_encoded); char *value_encoded = g_strndup(value, 3 * strlen(value)); http_encode(value_encoded); char *retval; if (strlen(url) != 0) retval = g_strdup_printf("%s&%s=%s", url, key_encoded, value_encoded); else retval = g_strdup_printf("%s=%s", key_encoded, value_encoded); g_free(key_encoded); g_free(value_encoded); return retval; }
int msn_ns_set_display_name( struct im_connection *ic, const char *value ) { struct msn_data *md = ic->proto_data; char fn[strlen(value)*3+1]; strcpy( fn, value ); http_encode( fn ); /* Note: We don't actually know if the server accepted the new name, and won't give proper feedback yet if it doesn't. */ return msn_ns_write( ic, -1, "PRP %d MFN %s\r\n", ++md->trId, fn ); }
/** * Escapes the characters of a string to make it URL safe. The returned * string should be freed with #g_free() when no longer needed. * * @param unescaped The string. * * @return The escaped string or NULL on error. **/ gchar *steam_http_uri_escape(const gchar *unescaped) { gchar *ret; gchar *str; g_return_val_if_fail(unescaped != NULL, NULL); str = g_strndup(unescaped, (strlen(unescaped) * 3) + 1); http_encode(str); ret = g_strdup(str); g_free(str); return ret; }
/* Convert an URL to a conn_t structure */ int conn_set( conn_t *conn, char *set_url ) { char url[MAX_STRING]; char *i, *j; /* protocol:// */ if( ( i = strstr( set_url, "://" ) ) == NULL ) { conn->proto = PROTO_DEFAULT; strncpy( url, set_url, MAX_STRING ); } else { if( set_url[0] == 'f' ) conn->proto = PROTO_FTP; else if( set_url[0] == 'h' ) conn->proto = PROTO_HTTP; else { return( 0 ); } strncpy( url, i + 3, MAX_STRING ); } /* Split */ if( ( i = strchr( url, '/' ) ) == NULL ) { strcpy( conn->dir, "/" ); } else { *i = 0; snprintf( conn->dir, MAX_STRING, "/%s", i + 1 ); if( conn->proto == PROTO_HTTP ) http_encode( conn->dir ); } strncpy( conn->host, url, MAX_STRING ); j = strchr( conn->dir, '?' ); if( j != NULL ) *j = 0; i = strrchr( conn->dir, '/' ); *i = 0; if( j != NULL ) *j = '?'; if( i == NULL ) { strncpy( conn->file, conn->dir, MAX_STRING ); strcpy( conn->dir, "/" ); } else { strncpy( conn->file, i + 1, MAX_STRING ); strcat( conn->dir, "/" ); } /* Check for username in host field */ if( strrchr( conn->host, '@' ) != NULL ) { strncpy( conn->user, conn->host, MAX_STRING ); i = strrchr( conn->user, '@' ); *i = 0; strncpy( conn->host, i + 1, MAX_STRING ); *conn->pass = 0; } /* If not: Fill in defaults */ else { if( conn->proto == PROTO_FTP ) { /* Dash the password: Save traffic by trying to avoid multi-line responses */ strcpy( conn->user, "anonymous" ); strcpy( conn->pass, "mailto:[email protected]" ); } else { *conn->user = *conn->pass = 0; } } /* Password? */ if( ( i = strchr( conn->user, ':' ) ) != NULL ) { *i = 0; strncpy( conn->pass, i + 1, MAX_STRING ); } /* Port number? */ if( ( i = strchr( conn->host, ':' ) ) != NULL ) { *i = 0; sscanf( i + 1, "%i", &conn->port ); } /* Take default port numbers from /etc/services */ else { #ifndef DARWIN struct servent *serv; if( conn->proto == PROTO_FTP ) serv = getservbyname( "ftp", "tcp" ); else serv = getservbyname( "www", "tcp" ); if( serv ) conn->port = ntohs( serv->s_port ); else #endif if( conn->proto == PROTO_HTTP ) conn->port = 80; else conn->port = 21; } return( conn->port > 0 ); }
int msn_buddy_list_add( struct im_connection *ic, msn_buddy_flags_t list, const char *who, const char *realname, const char *group ) { struct msn_data *md = ic->proto_data; char groupid[8]; bee_user_t *bu; struct msn_buddy_data *bd; char *adl; *groupid = '\0'; #if 0 if( group ) { int i; for( i = 0; i < md->groupcount; i ++ ) if( g_strcasecmp( md->grouplist[i], group ) == 0 ) { g_snprintf( groupid, sizeof( groupid ), " %d", i ); break; } if( *groupid == '\0' ) { /* Have to create this group, it doesn't exist yet. */ struct msn_groupadd *ga; GSList *l; for( l = md->grpq; l; l = l->next ) { ga = l->data; if( g_strcasecmp( ga->group, group ) == 0 ) break; } ga = g_new0( struct msn_groupadd, 1 ); ga->who = g_strdup( who ); ga->group = g_strdup( group ); md->grpq = g_slist_prepend( md->grpq, ga ); if( l == NULL ) { char groupname[strlen(group)+1]; strcpy( groupname, group ); http_encode( groupname ); g_snprintf( buf, sizeof( buf ), "ADG %d %s %d\r\n", ++md->trId, groupname, 0 ); return msn_write( ic, buf, strlen( buf ) ); } else { /* This can happen if the user's doing lots of adds to a new group at once; we're still waiting for the server to confirm group creation. */ return 1; } } } #endif if( !( ( bu = bee_user_by_handle( ic->bee, ic, who ) ) || ( bu = bee_user_new( ic->bee, ic, who, 0 ) ) ) || !( bd = bu->data ) || bd->flags & list ) return 1; bd->flags |= list; if( list == MSN_BUDDY_FL ) msn_soap_ab_contact_add( ic, bu ); else msn_soap_memlist_edit( ic, who, TRUE, list ); if( ( adl = adlrml_entry( who, list ) ) ) { int st = msn_ns_write( ic, -1, "ADL %d %zd\r\n%s", ++md->trId, strlen( adl ), adl ); g_free( adl ); return st; } return 1; }