diff options
Diffstat (limited to 'games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch')
-rw-r--r-- | games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch new file mode 100644 index 000000000000..730a69a2f4d0 --- /dev/null +++ b/games-fps/sauerbraten/files/sauerbraten-2013.01.04-master.patch @@ -0,0 +1,323 @@ +http://sourceforge.net/p/sauerbraten/code/4699/ + +--- a/src/shared/iengine.h ++++ b/src/shared/iengine.h +@@ -415,23 +415,6 @@ + extern int getservermtu(); + extern int getnumclients(); + extern uint getclientip(int n); +-extern void putint(ucharbuf &p, int n); +-extern void putint(packetbuf &p, int n); +-extern void putint(vector<uchar> &p, int n); +-extern int getint(ucharbuf &p); +-extern void putuint(ucharbuf &p, int n); +-extern void putuint(packetbuf &p, int n); +-extern void putuint(vector<uchar> &p, int n); +-extern int getuint(ucharbuf &p); +-extern void putfloat(ucharbuf &p, float f); +-extern void putfloat(packetbuf &p, float f); +-extern void putfloat(vector<uchar> &p, float f); +-extern float getfloat(ucharbuf &p); +-extern void sendstring(const char *t, ucharbuf &p); +-extern void sendstring(const char *t, packetbuf &p); +-extern void sendstring(const char *t, vector<uchar> &p); +-extern void getstring(char *t, ucharbuf &p, int len = MAXTRANS); +-extern void filtertext(char *dst, const char *src, bool whitespace = true, int len = sizeof(string)-1); + extern void localconnect(); + extern const char *disconnectreason(int reason); + extern void disconnect_client(int n, int reason); +--- a/src/engine/server.cpp ++++ b/src/engine/server.cpp +@@ -99,125 +99,6 @@ + va_end(args); + } + #endif +- +-// all network traffic is in 32bit ints, which are then compressed using the following simple scheme (assumes that most values are small). +- +-template<class T> +-static inline void putint_(T &p, int n) +-{ +- if(n<128 && n>-127) p.put(n); +- else if(n<0x8000 && n>=-0x8000) { p.put(0x80); p.put(n); p.put(n>>8); } +- else { p.put(0x81); p.put(n); p.put(n>>8); p.put(n>>16); p.put(n>>24); } +-} +-void putint(ucharbuf &p, int n) { putint_(p, n); } +-void putint(packetbuf &p, int n) { putint_(p, n); } +-void putint(vector<uchar> &p, int n) { putint_(p, n); } +- +-int getint(ucharbuf &p) +-{ +- int c = (char)p.get(); +- if(c==-128) { int n = p.get(); n |= char(p.get())<<8; return n; } +- else if(c==-127) { int n = p.get(); n |= p.get()<<8; n |= p.get()<<16; return n|(p.get()<<24); } +- else return c; +-} +- +-// much smaller encoding for unsigned integers up to 28 bits, but can handle signed +-template<class T> +-static inline void putuint_(T &p, int n) +-{ +- if(n < 0 || n >= (1<<21)) +- { +- p.put(0x80 | (n & 0x7F)); +- p.put(0x80 | ((n >> 7) & 0x7F)); +- p.put(0x80 | ((n >> 14) & 0x7F)); +- p.put(n >> 21); +- } +- else if(n < (1<<7)) p.put(n); +- else if(n < (1<<14)) +- { +- p.put(0x80 | (n & 0x7F)); +- p.put(n >> 7); +- } +- else +- { +- p.put(0x80 | (n & 0x7F)); +- p.put(0x80 | ((n >> 7) & 0x7F)); +- p.put(n >> 14); +- } +-} +-void putuint(ucharbuf &p, int n) { putuint_(p, n); } +-void putuint(packetbuf &p, int n) { putuint_(p, n); } +-void putuint(vector<uchar> &p, int n) { putuint_(p, n); } +- +-int getuint(ucharbuf &p) +-{ +- int n = p.get(); +- if(n & 0x80) +- { +- n += (p.get() << 7) - 0x80; +- if(n & (1<<14)) n += (p.get() << 14) - (1<<14); +- if(n & (1<<21)) n += (p.get() << 21) - (1<<21); +- if(n & (1<<28)) n |= -1<<28; +- } +- return n; +-} +- +-template<class T> +-static inline void putfloat_(T &p, float f) +-{ +- lilswap(&f, 1); +- p.put((uchar *)&f, sizeof(float)); +-} +-void putfloat(ucharbuf &p, float f) { putfloat_(p, f); } +-void putfloat(packetbuf &p, float f) { putfloat_(p, f); } +-void putfloat(vector<uchar> &p, float f) { putfloat_(p, f); } +- +-float getfloat(ucharbuf &p) +-{ +- float f; +- p.get((uchar *)&f, sizeof(float)); +- return lilswap(f); +-} +- +-template<class T> +-static inline void sendstring_(const char *t, T &p) +-{ +- while(*t) putint(p, *t++); +- putint(p, 0); +-} +-void sendstring(const char *t, ucharbuf &p) { sendstring_(t, p); } +-void sendstring(const char *t, packetbuf &p) { sendstring_(t, p); } +-void sendstring(const char *t, vector<uchar> &p) { sendstring_(t, p); } +- +-void getstring(char *text, ucharbuf &p, int len) +-{ +- char *t = text; +- do +- { +- if(t>=&text[len]) { text[len-1] = 0; return; } +- if(!p.remaining()) { *t = 0; return; } +- *t = getint(p); +- } +- while(*t++); +-} +- +-void filtertext(char *dst, const char *src, bool whitespace, int len) +-{ +- for(int c = uchar(*src); c; c = uchar(*++src)) +- { +- if(c == '\f') +- { +- if(!*++src) break; +- continue; +- } +- if(iscubeprint(c) || (iscubespace(c) && whitespace)) +- { +- *dst++ = c; +- if(!--len) break; +- } +- } +- *dst = '\0'; +-} + + enum { ST_EMPTY, ST_LOCAL, ST_TCPIP }; + +--- a/src/shared/tools.h ++++ b/src/shared/tools.h +@@ -1178,5 +1178,24 @@ + extern uint randomMT(); + extern int guessnumcpus(); + +-#endif +- ++extern void putint(ucharbuf &p, int n); ++extern void putint(packetbuf &p, int n); ++extern void putint(vector<uchar> &p, int n); ++extern int getint(ucharbuf &p); ++extern void putuint(ucharbuf &p, int n); ++extern void putuint(packetbuf &p, int n); ++extern void putuint(vector<uchar> &p, int n); ++extern int getuint(ucharbuf &p); ++extern void putfloat(ucharbuf &p, float f); ++extern void putfloat(packetbuf &p, float f); ++extern void putfloat(vector<uchar> &p, float f); ++extern float getfloat(ucharbuf &p); ++extern void sendstring(const char *t, ucharbuf &p); ++extern void sendstring(const char *t, packetbuf &p); ++extern void sendstring(const char *t, vector<uchar> &p); ++extern void getstring(char *t, ucharbuf &p, int len); ++template<class T, size_t N> static inline void getstring(T (&t)[N], ucharbuf &p) { getstring(t, p, N); } ++extern void filtertext(char *dst, const char *src, bool whitespace = true, int len = sizeof(string)-1); ++ ++#endif ++ +--- a/src/engine/master.cpp ++++ b/src/engine/master.cpp +@@ -514,7 +514,7 @@ + authreq &a = c.authreqs.add(); + a.reqtime = servtime; + a.id = id; +- uint seed[3] = { starttime, servtime, randomMT() }; ++ uint seed[3] = { uint(starttime), servtime, randomMT() }; + static vector<char> buf; + buf.setsize(0); + a.answer = genchallenge(u->pubkey, seed, sizeof(seed), buf); +--- a/src/shared/tools.cpp ++++ b/src/shared/tools.cpp +@@ -53,3 +53,124 @@ + return y; + } + ++///////////////////////// network /////////////////////// ++ ++// all network traffic is in 32bit ints, which are then compressed using the following simple scheme (assumes that most values are small). ++ ++template<class T> ++static inline void putint_(T &p, int n) ++{ ++ if(n<128 && n>-127) p.put(n); ++ else if(n<0x8000 && n>=-0x8000) { p.put(0x80); p.put(n); p.put(n>>8); } ++ else { p.put(0x81); p.put(n); p.put(n>>8); p.put(n>>16); p.put(n>>24); } ++} ++void putint(ucharbuf &p, int n) { putint_(p, n); } ++void putint(packetbuf &p, int n) { putint_(p, n); } ++void putint(vector<uchar> &p, int n) { putint_(p, n); } ++ ++int getint(ucharbuf &p) ++{ ++ int c = (char)p.get(); ++ if(c==-128) { int n = p.get(); n |= char(p.get())<<8; return n; } ++ else if(c==-127) { int n = p.get(); n |= p.get()<<8; n |= p.get()<<16; return n|(p.get()<<24); } ++ else return c; ++} ++ ++// much smaller encoding for unsigned integers up to 28 bits, but can handle signed ++template<class T> ++static inline void putuint_(T &p, int n) ++{ ++ if(n < 0 || n >= (1<<21)) ++ { ++ p.put(0x80 | (n & 0x7F)); ++ p.put(0x80 | ((n >> 7) & 0x7F)); ++ p.put(0x80 | ((n >> 14) & 0x7F)); ++ p.put(n >> 21); ++ } ++ else if(n < (1<<7)) p.put(n); ++ else if(n < (1<<14)) ++ { ++ p.put(0x80 | (n & 0x7F)); ++ p.put(n >> 7); ++ } ++ else ++ { ++ p.put(0x80 | (n & 0x7F)); ++ p.put(0x80 | ((n >> 7) & 0x7F)); ++ p.put(n >> 14); ++ } ++} ++void putuint(ucharbuf &p, int n) { putuint_(p, n); } ++void putuint(packetbuf &p, int n) { putuint_(p, n); } ++void putuint(vector<uchar> &p, int n) { putuint_(p, n); } ++ ++int getuint(ucharbuf &p) ++{ ++ int n = p.get(); ++ if(n & 0x80) ++ { ++ n += (p.get() << 7) - 0x80; ++ if(n & (1<<14)) n += (p.get() << 14) - (1<<14); ++ if(n & (1<<21)) n += (p.get() << 21) - (1<<21); ++ if(n & (1<<28)) n |= -1<<28; ++ } ++ return n; ++} ++ ++template<class T> ++static inline void putfloat_(T &p, float f) ++{ ++ lilswap(&f, 1); ++ p.put((uchar *)&f, sizeof(float)); ++} ++void putfloat(ucharbuf &p, float f) { putfloat_(p, f); } ++void putfloat(packetbuf &p, float f) { putfloat_(p, f); } ++void putfloat(vector<uchar> &p, float f) { putfloat_(p, f); } ++ ++float getfloat(ucharbuf &p) ++{ ++ float f; ++ p.get((uchar *)&f, sizeof(float)); ++ return lilswap(f); ++} ++ ++template<class T> ++static inline void sendstring_(const char *t, T &p) ++{ ++ while(*t) putint(p, *t++); ++ putint(p, 0); ++} ++void sendstring(const char *t, ucharbuf &p) { sendstring_(t, p); } ++void sendstring(const char *t, packetbuf &p) { sendstring_(t, p); } ++void sendstring(const char *t, vector<uchar> &p) { sendstring_(t, p); } ++ ++void getstring(char *text, ucharbuf &p, int len) ++{ ++ char *t = text; ++ do ++ { ++ if(t>=&text[len]) { text[len-1] = 0; return; } ++ if(!p.remaining()) { *t = 0; return; } ++ *t = getint(p); ++ } ++ while(*t++); ++} ++ ++void filtertext(char *dst, const char *src, bool whitespace, int len) ++{ ++ for(int c = uchar(*src); c; c = uchar(*++src)) ++ { ++ if(c == '\f') ++ { ++ if(!*++src) break; ++ continue; ++ } ++ if(iscubeprint(c) || (iscubespace(c) && whitespace)) ++ { ++ *dst++ = c; ++ if(!--len) break; ++ } ++ } ++ *dst = '\0'; ++} ++ |