tOld metaserver communication code removed - vaccinewars - be a doctor and try to vaccinate the world (HTM) git clone git://src.adamsgaard.dk/vaccinewars (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit deb1942deb69bf7fbce7a15bb2ce2555155e5a2c (DIR) parent abf3aef9702f6f15adeeb0280e7ba60bad43acd8 (HTM) Author: Ben Webb <ben@salilab.org> Date: Wed, 12 Sep 2001 19:13:55 +0000 Old metaserver communication code removed Diffstat: M src/curses_client.c | 39 ++++++++++++++++++++++++------- M src/message.c | 124 ++----------------------------- M src/message.h | 9 +-------- 3 files changed, 39 insertions(+), 133 deletions(-) --- (DIR) diff --git a/src/curses_client.c b/src/curses_client.c t@@ -220,12 +220,15 @@ static char *SelectServerFromMetaServer(void) { /* server/port pairs, one of which the user should select. */ /* Returns a pointer to a static string containing an error */ /* message if the connection failed, otherwise NULL. */ - char *MetaError; - int HttpSock,c; + int c; GSList *ListPt; ServerData *ThisServer; GString *text; gint index; + fd_set readfds,writefds; + int maxsock; + gboolean DoneOK=TRUE; + HttpConnection *MetaConn; static char NoServers[] = N_("No servers listed on metaserver"); attrset(TextAttr); t@@ -233,16 +236,34 @@ static char *SelectServerFromMetaServer(void) { mvaddstr(17,1,_("Please wait... attempting to contact metaserver...")); refresh(); - MetaError=OpenMetaServerConnection(&HttpSock); - if (MetaError) return MetaError; + MetaConn = OpenMetaHttpConnection(); - clear_line(17); + if (!MetaConn) return "Cannot connect"; + + ClearServerList(); + + while(DoneOK) { + FD_ZERO(&readfds); FD_ZERO(&writefds); + FD_SET(0,&readfds); maxsock=1; + SetSelectForNetworkBuffer(&MetaConn->NetBuf,&readfds,&writefds, + NULL,&maxsock); + if (bselect(maxsock,&readfds,&writefds,NULL,NULL)==-1) { + if (errno==EINTR) { /*CheckForResize(Play);*/ continue; } + perror("bselect"); exit(1); + } + if (RespondToSelect(&MetaConn->NetBuf,&readfds,&writefds,NULL,&DoneOK)) { + while (HandleWaitingMetaServerData(MetaConn)) {} + } + if (!DoneOK) { + g_print("Metaserver communication closed"); + } + } + CloseHttpConnection(MetaConn); + +/* clear_line(17); mvaddstr(17,1, _("Connection to metaserver established. Obtaining server list...")); - refresh(); - - ReadMetaServerData(HttpSock); - CloseMetaServerConnection(HttpSock); + refresh();*/ text=g_string_new(""); (DIR) diff --git a/src/message.c b/src/message.c t@@ -774,36 +774,14 @@ gboolean HandleWaitingMetaServerData(HttpConnection *conn) { return TRUE; } -gchar *bgets(int fd) { -/* Drop-in substitute for fgets; reads a newline-terminated string from */ -/* file descriptor fd, into a dynamically-allocated buffer. Returns a */ -/* pointer to the buffer, or NULL if an error occurred. It is the user's */ -/* responsibility to g_free the pointer when it is no longer needed. */ -/* Used for non-blocking read from TCP sockets. */ -/* N.B. The terminating newline is _not_ returned in the string. */ - ssize_t len; - unsigned TotalLen=0; - GString *text; - gchar *buffer; - char tmp[10]; - text=g_string_new(NULL); - for (;;) { - len=recv(fd,tmp,1,0); - if (len==SOCKET_ERROR) { g_string_free(text,TRUE); return NULL; } - if (len==0) { g_string_free(text,TRUE); return NULL; } - if (tmp[0]=='\n') { - buffer=text->str; - g_string_free(text,FALSE); /* Just free the g_string, not the data */ - return buffer; - } else { - g_string_append_c(text,tmp[0]); - TotalLen++; - /* Test to make sure dodgy clients don't eat all of our nice memory */ - if (TotalLen > 64000) { - g_warning("Abnormally large packet"); - g_string_free(text,TRUE); return NULL; - } - } +void ClearServerList() { + ServerData *ThisServer; + while (ServerList) { + ThisServer=(ServerData *)(ServerList->data); + g_free(ThisServer->Name); g_free(ThisServer->Comment); + g_free(ThisServer->Version); g_free(ThisServer->Update); + g_free(ThisServer->UpSince); g_free(ThisServer); + ServerList=g_slist_remove(ServerList,ThisServer); } } #endif /* NETWORKING */ t@@ -1355,92 +1333,6 @@ gboolean HandleGenericClientMessage(Player *From,AICode AI,MsgCode Code, return TRUE; } -#ifdef NETWORKING -char *OpenMetaServerConnection(int *HttpSock) { - static char NoHost[] = N_("Cannot locate metaserver"); - static char NoSocket[] = N_("Cannot create socket"); - static char NoService[] = - N_("Metaserver not running HTTP or connection denied"); - struct sockaddr_in HttpAddr; - struct hostent *he; - gchar *MetaName; - int MetaPort; - -/* If a proxy is defined, connect to that. Otherwise, connect to the - metaserver directly */ - if (MetaServer.ProxyName[0]) { - MetaName=MetaServer.ProxyName; MetaPort=MetaServer.ProxyPort; - } else { - MetaName=MetaServer.Name; MetaPort=MetaServer.Port; - } - - if ((he=gethostbyname(MetaName))==NULL) return NoHost; - if ((*HttpSock=socket(AF_INET,SOCK_STREAM,0))==-1) return NoSocket; - HttpAddr.sin_family=AF_INET; - HttpAddr.sin_port=htons(MetaPort); - HttpAddr.sin_addr=*((struct in_addr *)he->h_addr); - memset(HttpAddr.sin_zero,0,sizeof(HttpAddr.sin_zero)); - if (connect(*HttpSock,(struct sockaddr *)&HttpAddr, - sizeof(struct sockaddr))==SOCKET_ERROR) { - CloseSocket(*HttpSock); - return NoService; - } - return NULL; -} - -void CloseMetaServerConnection(int HttpSock) { - CloseSocket(HttpSock); -} - -void ClearServerList() { - ServerData *ThisServer; - while (ServerList) { - ThisServer=(ServerData *)(ServerList->data); - g_free(ThisServer->Name); g_free(ThisServer->Comment); - g_free(ThisServer->Version); g_free(ThisServer->Update); - g_free(ThisServer->UpSince); g_free(ThisServer); - ServerList=g_slist_remove(ServerList,ThisServer); - } -} - -void ReadMetaServerData(int HttpSock) { - gchar *buf; - ServerData *NewServer; - gboolean HeaderDone; - - ClearServerList(); - buf=g_strdup_printf("GET %s?output=text&getlist=%d HTTP/1.1\n" - "Host: %s:%d\n\n",MetaServer.Path,METAVERSION, - MetaServer.Name,MetaServer.Port); - send(HttpSock,buf,strlen(buf),0); - g_free(buf); - HeaderDone=FALSE; - - while ((buf=bgets(HttpSock))) { - if (HeaderDone) { - NewServer=g_new0(ServerData,1); - NewServer->Name=buf; - buf=bgets(HttpSock); - NewServer->Port=atoi(buf); g_free(buf); - NewServer->Version=bgets(HttpSock); - buf=bgets(HttpSock); - if (buf[0]) NewServer->CurPlayers=atoi(buf); - else NewServer->CurPlayers=-1; - g_free(buf); - buf=bgets(HttpSock); - NewServer->MaxPlayers=atoi(buf); g_free(buf); - NewServer->Update=bgets(HttpSock); - NewServer->Comment=bgets(HttpSock); - NewServer->UpSince=bgets(HttpSock); - ServerList=g_slist_append(ServerList,NewServer); - } else { - if (strncmp(buf,"MetaServer:",11)==0) HeaderDone=TRUE; - g_free(buf); - } - } -} -#endif /* NETWORKING */ - void SendFightReload(Player *To) { SendFightMessage(To,NULL,0,F_RELOAD,(price_t)0,FALSE,NULL); } (DIR) diff --git a/src/message.h b/src/message.h t@@ -133,8 +133,7 @@ HttpConnection *OpenMetaHttpConnection(void); void CloseHttpConnection(HttpConnection *conn); gchar *ReadHttpResponse(HttpConnection *conn); gboolean HandleWaitingMetaServerData(HttpConnection *conn); - -gchar *bgets(int fd); +void ClearServerList(void); #endif /* NETWORKING */ extern GSList *FirstClient; t@@ -168,12 +167,6 @@ int ProcessMessage(char *Msg,Player *Play,Player **Other,AICode *AI, void ReceiveDrugsHere(char *text,Player *To); gboolean HandleGenericClientMessage(Player *From,AICode AI,MsgCode Code, Player *To,char *Data,DispMode *DisplayMode); -#ifdef NETWORKING -char *OpenMetaServerConnection(int *HttpSock); -void CloseMetaServerConnection(int HttpSock); -void ClearServerList(void); -void ReadMetaServerData(int HttpSock); -#endif void InitAbilities(Player *Play); void SendAbilities(Player *Play); void ReceiveAbilities(Player *Play,gchar *Data);