I wonder how this feature is going to come back to bite me in the ass later

git-svn-id: https://svn.eduke32.com/eduke32@417 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2006-12-14 04:13:19 +00:00
parent dc0dea7c09
commit a68248896c
2 changed files with 71 additions and 60 deletions

View file

@ -893,7 +893,7 @@ int getversionfromwebsite(char *buffer) // FIXME: this probably belongs in game
struct hostent *h; struct hostent *h;
char *host = "eduke32.sourceforge.net"; char *host = "eduke32.sourceforge.net";
char *req = "GET http://eduke32.sourceforge.net/VERSION HTTP/1.0\r\n\r\n"; char *req = "GET http://eduke32.sourceforge.net/VERSION HTTP/1.0\r\n\r\n";
char tempbuf[2048],ver[16]; char tempbuf[2048],otherbuf[16],ver[16];
#ifdef _WIN32 #ifdef _WIN32
if (wsainitialized == 0) if (wsainitialized == 0)
@ -901,7 +901,7 @@ int getversionfromwebsite(char *buffer) // FIXME: this probably belongs in game
WSADATA ws; WSADATA ws;
if (WSAStartup(0x101,&ws) == SOCKET_ERROR) { if (WSAStartup(0x101,&ws) == SOCKET_ERROR) {
initprintf("mmulti: Winsock error in getexternaladdress() (%d)\n",errno); initprintf("update: Winsock error in getversionfromwebsite() (%d)\n",errno);
return(0); return(0);
} }
wsainitialized = 1; wsainitialized = 1;
@ -909,7 +909,7 @@ int getversionfromwebsite(char *buffer) // FIXME: this probably belongs in game
#endif #endif
if ((h=gethostbyname(host)) == NULL) { if ((h=gethostbyname(host)) == NULL) {
initprintf("mmulti: gethostbyname() error in getexternaladdress() (%d)\n",h_errno); initprintf("update: gethostbyname() error in getversionfromwebsite() (%d)\n",h_errno);
return(0); return(0);
} }
@ -923,18 +923,18 @@ int getversionfromwebsite(char *buffer) // FIXME: this probably belongs in game
mysock = socket(PF_INET, SOCK_STREAM, 0); mysock = socket(PF_INET, SOCK_STREAM, 0);
if (mysock == INVALID_SOCKET) { if (mysock == INVALID_SOCKET) {
initprintf("mmulti: socket() error in getexternaladdress() (%d)\n",errno); initprintf("update: socket() error in getversionfromwebsite() (%d)\n",errno);
return(0); return(0);
} }
if (connect(mysock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == SOCKET_ERROR) { if (connect(mysock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == SOCKET_ERROR) {
initprintf("mmulti: connect() error in getexternaladdress() (%d)\n",errno); initprintf("update: connect() error in getversionfromwebsite() (%d)\n",errno);
return(0); return(0);
} }
bytes_sent = send(mysock, req, strlen(req), 0); bytes_sent = send(mysock, req, strlen(req), 0);
if (bytes_sent == SOCKET_ERROR) { if (bytes_sent == SOCKET_ERROR) {
initprintf("mmulti: send() error in getexternaladdress() (%d)\n",errno); initprintf("update: send() error in getversionfromwebsite() (%d)\n",errno);
return(0); return(0);
} }
@ -942,20 +942,31 @@ int getversionfromwebsite(char *buffer) // FIXME: this probably belongs in game
recv(mysock, (char *)&tempbuf, sizeof(tempbuf), 0); recv(mysock, (char *)&tempbuf, sizeof(tempbuf), 0);
closesocket(mysock); closesocket(mysock);
for (i=0;(unsigned)i<strlen(tempbuf);i++) // HACK: all of this needs to die a fiery death; we just skip to the content memcpy(&otherbuf,&tempbuf,sizeof(otherbuf));
{ // instead of actually parsing any of the http headers
if (i > 4) strtok(otherbuf," ");
if (tempbuf[i-1] == '\n' && tempbuf[i-2] == '\r' && tempbuf[i-3] == '\n' && tempbuf[i-4] == '\r') if (atol(strtok(NULL," ")) == 200)
{ {
while (j < 9) for (i=0;(unsigned)i<strlen(tempbuf);i++) // HACK: all of this needs to die a fiery death; we just skip to the content
{ // instead of actually parsing any of the http headers
if (i > 4)
if (tempbuf[i-1] == '\n' && tempbuf[i-2] == '\r' && tempbuf[i-3] == '\n' && tempbuf[i-4] == '\r')
{ {
ver[j] = tempbuf[i]; while (j < 9)
i++, j++; {
ver[j] = tempbuf[i];
i++, j++;
}
ver[j] = '\0';
break;
} }
ver[j] = '\0'; }
break;
if (j)
{
strcpy(buffer,ver);
return(1);
} }
} }
strcpy(buffer,ver); return(0);
return(1);
} }

View file

@ -50,7 +50,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define TIMERUPDATESIZ 32 #define TIMERUPDATESIZ 32
#define BUILDDATE 20061213 #define BUILDDATE 20061212
long cameradist = 0, cameraclock = 0; long cameradist = 0, cameraclock = 0;
char playerswhenstarted; char playerswhenstarted;
@ -9410,49 +9410,8 @@ static void Startup(long argc, char **argv)
netparam = NULL; netparam = NULL;
netparamcount = 0; netparamcount = 0;
initprintf("%ld\n",time(NULL));
if (numplayers > 1) if (numplayers > 1)
initprintf("Multiplayer initialized.\n"); initprintf("Multiplayer initialized.\n");
#ifdef _WIN32
else if (checkforupdates == 1)
{
i = time(NULL);
if (i > lastupdatecheck+86400)
{
#include <shellapi.h>
extern int getversionfromwebsite(char *buffer);
if (getversionfromwebsite(tempbuf))
{
lastupdatecheck = i;
if (atol(tempbuf) > BUILDDATE)
{
if (wm_ynbox("EDuke32","A new version of EDuke32 is available. "
"Would you like to download it now?"))
{
SHELLEXECUTEINFOA sinfo;
char *p = "http://www.eduke32.com/";
Bmemset(&sinfo, 0, sizeof(sinfo));
sinfo.cbSize = sizeof(sinfo);
sinfo.fMask = SEE_MASK_CLASSNAME;
sinfo.lpVerb = "open";
sinfo.lpFile = p;
sinfo.nShow = SW_SHOWNORMAL;
sinfo.lpClass = "http";
if(!ShellExecuteExA(&sinfo))
initprintf("Error launching browser!\n");
gameexit(" ");
}
}
}
}
}
#endif
screenpeek = myconnectindex; screenpeek = myconnectindex;
ps[myconnectindex].palette = (char *) &palette[0]; ps[myconnectindex].palette = (char *) &palette[0];
@ -9802,6 +9761,47 @@ void app_main(int argc,char **argv)
if (i) checkforupdates = 1; if (i) checkforupdates = 1;
else checkforupdates = 0; else checkforupdates = 0;
} }
if (checkforupdates == 1)
{
i = time(NULL);
if (i > lastupdatecheck+86400)
{
#include <shellapi.h>
extern int getversionfromwebsite(char *buffer);
if (getversionfromwebsite(tempbuf))
{
lastupdatecheck = i;
if (atol(tempbuf) > BUILDDATE)
{
if (wm_ynbox("EDuke32","A new version of EDuke32 is available. "
"Would you like to download it now?"))
{
SHELLEXECUTEINFOA sinfo;
char *p = "http://www.eduke32.com/";
Bmemset(&sinfo, 0, sizeof(sinfo));
sinfo.cbSize = sizeof(sinfo);
sinfo.fMask = SEE_MASK_CLASSNAME;
sinfo.lpVerb = "open";
sinfo.lpFile = p;
sinfo.nShow = SW_SHOWNORMAL;
sinfo.lpClass = "http";
if(!ShellExecuteExA(&sinfo))
initprintf("Error launching browser!\n");
CONFIG_SetupMouse();
CONFIG_SetupJoystick();
CONFIG_WriteSetup();
gameexit(" ");
}
}
}
}
}
#endif #endif
if (preinitengine()) if (preinitengine())