Author |
Message |
Samapico No, these DO NOT look like penises, ok?
Joined: May 08 2003 Posts: 1252 Offline
|
Posted: Mon Sep 06, 2010 7:42 pm Post subject: MERVBot doesn't handle *getfile? |
|
|
|
|
I'm trying to get a mervbot to *getfile a list of files from the server, in sequence. But when the bot does a *getfile, it
What shows up in the bot's log:
BOT>Sama PV:Samapico> !getfilelist somelist.txt
BOT>Sama A:File sent: server.cfg
(please wait...)
BOT>Sama Unknown message type 16(17)
From what I understand, a packet 16 with a length of 17 would be a file transfer packet with no data
What's happening?
Relevant code from the core:
void __stdcall handleFileTransfer(hostMessage *m)
{ DEFLATE_CLASS
/* Field Length Description
0 1 Type byte
1 16 File name
17 ... [Compressed] file
*/
char *name = msg + 1;
char *buffer = msg + 17;
Uint32 i, length = len - 17;
if (len <= 17)
{
handleUnknown(m);
return;
}
for (i = 0; i < 16; ++i)
{
char c = name[i];
if (c == 0)
break;
switch (c)
{
case '/':
case '\\':
h->logEvent("WARNING: Invalid downloaded-file name path ignored. (%s)", name);
return;
};
if ((c < ' ') || (c > '~'))
{
h->logEvent("WARNING: Invalid downloaded-file name chars ignored.");
return;
}
}
if (i == 16)
{
h->logEvent("WARNING: Unterminated downloaded-file name ignored.");
return;
}
if (*name)
{ // regular file
String fname = "get/";
fname += name;
ofstream file(fname.msg, ios::binary);
if (file)
{
file.write(buffer, length);
h->logEvent("Received file: %s", fname.msg);
h->imports->talk(makeFile(fname.msg));
}
else
{
h->logEvent("Unable to open file for write: %s", fname.msg);
}
}
else
{ // news file
h->downloadingNews = false;
if (decompress_to_file("get/news.txt", buffer, length))
h->logEvent("News file successfully transferred!");
else
h->logEvent("Unable to decompress news file.");
}
}
|
_________________ (Insert a bunch of dead links here) |
|
Back to top |
|
|
cycad Novice
Gender: Joined: Feb 12 2004 Posts: 29 Offline
|
Posted: Tue Sep 07, 2010 2:32 pm Post subject: |
|
|
|
|
I think file transfer packets are core type 0x0A. I don't know what type 16 would be, I do S2C file transfers using 0x0A exclusively (which may or may not be correct:). If you can print the raw packet data received the problem might be more evident.
Also, is this with subgame or asss? |
|
Back to top |
|
|
Samapico No, these DO NOT look like penises, ok?
Joined: May 08 2003 Posts: 1252 Offline
|
Posted: Tue Sep 07, 2010 9:52 pm Post subject: |
|
|
|
|
subgame
Any easy way to print the raw packet data? Or do I need to recompile the bot entirely?
And... according to the wiki, it's 0x10
http://wiki.minegoboom.com/index.php/UDP_Game_Protocol
----------------------------------------
0x0A Game 0x40306F Password response
[...]
----------------------------------------
0x10 Game 0x4027CD File transfer
- 0 1 Type |
|
Back to top |
|
|
cycad Novice
Gender: Joined: Feb 12 2004 Posts: 29 Offline
|
Posted: Tue Sep 07, 2010 11:54 pm Post subject: |
|
|
|
|
I'm not sure about packet printing, maybe merv has a debug output option somewhere.
As far as the packet types mine is for the core type (not game) 0x0A, and my handler is http://pastebin.com/nZBxj1ub
and I haven't had any problems/complaints. Maybe there's a difference between lvz file transfers such as when you join an arena and *getfile transfers. The handler above is for *getfile.
It's been a while since I looked at the code so I might be missing something. |
|
Back to top |
|
|
|