aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPlex <thinkplex@riseup.net>2021-10-24 23:33:48 +0200
committerPlex <thinkplex@riseup.net>2021-10-24 23:33:48 +0200
commitd937614705989b9e71c366e5fe61751ba0d1a2eb (patch)
treee75c19227164e960a8b25044ae9945c1acd3104f
parentdd1779c4c7581b0b863886371f891d9d545d6b27 (diff)
readValInt
-rwxr-xr-xmcpingbin17840 -> 18008 bytes
-rw-r--r--mcping.c12
-rw-r--r--mctypes.c15
-rw-r--r--mctypes.h4
4 files changed, 21 insertions, 10 deletions
diff --git a/mcping b/mcping
index 6ab6d49..b598bc6 100755
--- a/mcping
+++ b/mcping
Binary files differ
diff --git a/mcping.c b/mcping.c
index a228114..084b481 100644
--- a/mcping.c
+++ b/mcping.c
@@ -22,11 +22,11 @@ int main(int argc, char *argv[])
}
varint n;
n = writeVarInt(atoi(argv[1]));
- while((*n & 0b10000000) != 0) {
- printf("%02X ", *n);
- n++;
- }
- printf("%02X ", *n);
- printf("\n");
+ // while((*n & 0b10000000) != 0) {
+ // printf("%02X ", *n);
+ // n++;
+ // }
+ // printf("%02X\n", *n);
+ printf("%d\n", readVarInt(n));
return 0;
}
diff --git a/mctypes.c b/mctypes.c
index ad855e4..10d083d 100644
--- a/mctypes.c
+++ b/mctypes.c
@@ -5,7 +5,6 @@
varint writeVarInt(unsigned int x)
{
- // unsigned int v = x;
varint n = malloc(sizeof(u_int8_t));
unsigned int size = 1;
while(1) {
@@ -14,7 +13,7 @@ varint writeVarInt(unsigned int x)
x >>= 7;
if(x == 0)
return n;
- n[size-1] |= 0b10000000;
+ n[size-1] |= 0x80;
size++;
}
return n;
@@ -34,3 +33,15 @@ writeVarInt(varint x, int s)
x >>= 7;
}
} */
+
+int readVarInt(varint x)
+{
+ unsigned int offset = 0;
+ unsigned int res = 0;
+ do {
+ if(offset == 5) exit(EXIT_FAILURE);
+ res |= x[offset] << offset*7;
+ offset++;
+ } while ((x[offset-1] & 0b10000000) != 0);
+ return (int) res;
+}
diff --git a/mctypes.h b/mctypes.h
index 3fe4a7f..7dad6db 100644
--- a/mctypes.h
+++ b/mctypes.h
@@ -10,9 +10,9 @@ typedef struct {
typedef struct {
varint length;
varint id;
- char *data;;
+ char *data;
} packet;
-int writeVarInt(varint x);
+int readVarInt(varint x);
varint writeVarInt(unsigned int x);