summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.patch323
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';
++}
++