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);