STREAM *HTTPSetupConnection(HTTPInfoStruct *Info, int ForceHTTPS) { char *Proto=NULL, *Host=NULL, *Token=NULL; int Port=0, Flags=0; STREAM *S; S=STREAMCreate(); if (Info->Flags & HTTP_PROXY) { if (! Info->ProxyAuthorization) { Info->ProxyAuthorization=(HTTPAuthStruct *) calloc(1,sizeof(HTTPAuthStruct)); } ParseURL(Info->Proxy, &Proto, &Host, &Token, &Info->ProxyAuthorization->Logon, &Info->ProxyAuthorization->Password,NULL,NULL); Port=atoi(Token); if (ForceHTTPS) Proto=CopyStr(Proto,"https"); if (strcasecmp(Proto,"https")==0) Flags |= CONNECT_SSL; } else { Host=CopyStr(Host,Info->Host); Port=Info->Port; if (Info->Flags & HTTP_SSL) Flags |= CONNECT_SSL; if (ForceHTTPS) { Flags |= CONNECT_SSL; } if (Port==0) { if (Flags & CONNECT_SSL) Port=443; else Port=80; } } if (Info->Flags & HTTP_TUNNEL) STREAMAddConnectionHop(S,Info->Proxy); if (STREAMConnectToHost(S,Host,Port,Flags)) { HTTPSendHeaders(S,Info); } else { STREAMClose(S); S=NULL; } Info->S=S; DestroyString(Token); DestroyString(Proto); DestroyString(Host); return(S); }
void STREAMAddConnectionHopList(STREAM *S, char *HopList) { char *Hop=NULL, *ptr; ptr=GetToken(HopList,",",&Hop,0); while (ptr) { STREAMAddConnectionHop(S,Hop); ptr=GetToken(ptr,",",&Hop,0); } DestroyString(Hop); }