|
|||||||
This is a discussion on "MSSP (Mud Server Status Protocol)" in the Top Mud Sites Advanced MUD Concepts forum : A couple of weeks ago I posted a RFC on MudBytes regarding the creation of a protocol for Muds to automatically report their info to mud crawlers. Since then a lot has happened. I set up an official protocol specification and created a snippet that adds basic telnet handling for MCCP, MSSP, NAWS, and TTYPE. I also added MSSP support to TinTin++ so it can be used to debug server side MSSP support. So far four Muds (and one codebase) have implemented the protocol, the MudBytes crawler has added support for it and plans to integrate it into their mud ... |
|
You are currently viewing our boards as a guest which gives you limited access to view most discussions and access our other features. By joining our free community you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content and access many other special features. Registration is fast, simple and absolutely free so please, join our MUD community today! If you have any problems with the registration process or your account login, please contact us. If you are a registered member of the old TMS forums, please click here
|
![]() |
|
|
LinkBack | Thread Tools |
|
|
#1 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
MSSP (Mud Server Status Protocol)
A couple of weeks ago I posted a RFC on MudBytes regarding the creation of a protocol for Muds to automatically report their info to mud crawlers. Since then a lot has happened. I set up an official protocol specification and created a snippet that adds basic telnet handling for MCCP, MSSP, NAWS, and TTYPE. I also added MSSP support to TinTin++ so it can be used to debug server side MSSP support. So far four Muds (and one codebase) have implemented the protocol, the MudBytes crawler has added support for it and plans to integrate it into their mud directory, and both TMC and TMS have shown interest in adopting the protocol though they'll probably want to see it kick off first.
For a quick look at what MSSP entails see my mud crawler's output. Feedback and comments are welcome, keep in mind that the protocol only defines a brief set of official variables, Mud listings can maintain a list of additional variables they support. If you implement MSSP and want to be added to the crawler give me a yell. Links: MSSP Protocol defintion Client for debugging: TinTin++ (Requires using '#config {debug telnet} on' to display MSSP output from a MUD server.) Codebases supporing MSSP: AckFUSS (As of version 4.4.0.) MUD Crawlers supporing MSSP: MudByte's MUD crawler TinTin++ MUD crawler Discussion forum for MSSP (on MydBytes) MSSP Discussion Forum Server supporting MSSP: azereth.game-host.org:6400 cruentus.genesismuds.com:7070 home.gotr00t.us:3000 slackhalla.org:4321 MSSP Snippets: MUD Telopt Handler - Handles MCCP, MSSP, NAWS, and TTYPE. |
|
|
|
|
|
#2 | |
|
Member
Join Date: Jan 2006
Posts: 92
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
Come to think of it, my MUSH has a policy that no one is to know who may be multiplaying, so that may be problematical, as identifying how many players are on may give it away when the population is low. |
|
|
|
|
|
|
#3 | ||
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
Quote:
If push comes to shove the mud can only allow MSSP requests from trusted IPs. |
||
|
|
|
|
|
#4 |
|
New Member
Join Date: Apr 2008
Posts: 1
![]() |
Re: MSSP (Mud Server Status Protocol)
Just a quick correction, azereth.game-host.org:6464 instead of port 6400
|
|
|
|
|
|
#5 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
I accidentally used the website's port, it's fixed now.
Update: The NakedMud codebase will support MSSP as of version 3.8. |
|
|
|
|
|
#6 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
Two more muds added MSSP bringing the total to 6:
kingdomsofahln.com:7777 patrickmn.com:5000 Also updated the mssp crawler to make the crawler page look a bit neater. MSSP Mud Crawler |
|
|
|
|
|
#7 |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
I'd include this functionality in NiMUD, how do you join the network?
|
|
|
|
|
|
#8 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
Listings on MudBytes should automatically be crawled, though MudBytes is currently not doing anything with the data, and if someone gives me the host and port of a MSSP supporting Mud I'll manually add it to my crawler.
|
|
|
|
|
|
#9 |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Actually, I downloaded the MSSP snippet. I'm attempting to install it, but I wonder how to report to a crawler?
BTW, it complains about signedness several times, though some of these seem intentional. Here are my compilation warnings: telopt.c: In function 'translate_telopts': telopt.c:123: warning: pointer targets in assignment differ in signedness telopt.c:124: warning: pointer targets in assignment differ in signedness telopt.c:134: warning: pointer targets in assignment differ in signedness telopt.c: At top level: telopt.c:447: warning: no previous prototype for 'send_will_mssp' telopt.c:524: warning: no previous prototype for 'zlib_alloc' telopt.c:530: warning: no previous prototype for 'zlib_free' telopt.c: In function 'write_compressed': telopt.c:618: warning: pointer targets in assignment differ in signedness telopt.c: In function 'write_to_descriptor': telopt.c:752: warning: pointer targets in passing argument 2 of 'debug_telopts' differ in signedness telopt.c:756: warning: pointer targets in passing argument 1 of 'recv_sb_mssp' differ in signedness gcc -O -g -g3 -ggdb3 -DMALLOC_DEBUG -D_GNU_SOURCE -o nimud alias.o admin.o admin_edit.o admin_info.o bit.o board.o client.o combat.o config.o def.o door.o edit.o events.o load.o functions.o furn.o grammar.o graphics.o handler.o html.o disease.o interpreter.o language.o lists.o magic.o map.o mem.o money.o mount.o nanny.o net.o imc.o info.o move.o props.o parser.o save.o shop.o skills.o social.o string.o tips.o translate.o track.o update.o worldgen.o xrand.o mssp_client.o mssp_tables.o telopt.o -lcrypt -lz |
|
|
|
|
|
#10 |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Scandum:
nimud.divineright.org 5333 I have not yet fully implemented it though. Is there a MUD I can meet you on to ask questions? |
|
|
|
|
|
#11 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
I'm not actively hanging out on any mud.
You can use tintin in telnet debugging mode for debugging, and look at the mth snippet as an example of a server side implementation. I tested your mud but am getting the following response: Code:
RCVD IAC DO LINEMODE SENT IAC WONT LINEMODE RCVD IAC WILL ECHO SENT IAC DO ECHO RCVD IAC 0 0 <greeting> RCVD IAC 34 255 |
|
|
|
|
|
#12 | |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
mud.h -> mssp.h telnet.h -> telnet.h telopt.c -> telopt.c table.c -> mssp_table.c client.c -> mssp_client.c I am using your write_to_descriptor only for your code, since I use something called "write_to_connection" I am using translate_telopts(), zlib, etc. I added the content, verbatim, to DESCRIPTOR_DATA (called CONNECTION_DATA here): Code:
/*
* Connection (channel) structure.
*/
struct connection_data
{
CONNECTION_DATA * next;
CONNECTION_DATA * snoop_by;
PLAYER_DATA * character;
PLAYER_DATA * original;
char * host;
int lingua;
int connection;
int connected;
bool fcommand;
bool client;
bool fpromptok;
int showing; // for simulated local echo
char inbuf [4 * MAX_INPUT_LENGTH];
char incomm [MAX_INPUT_LENGTH];
char inlast [MAX_INPUT_LENGTH];
char screen[80*50]; /* for graphical windows */
int repeat;
char * showstr_head;
char * showstr_point;
char * outbuf;
int outsize;
int outtop;
void * pEdit;
char ** pString;
/*
* Information gathered with MSSP snippet.
*/
char * terminal_type;
char msoutbuf[MAX_STRING_LENGTH];
int msouttop;
char telbuf[MAX_INPUT_LENGTH];
int teltop;
short comm_flags;
short cols;
short rows;
z_stream * mccp;
};
msoutbuf these are not used at all actually. Well, the preface to this is that NiMUD uses character mode, not line mode. There has been a slight issue during login prior to this where it gets stuck waiting for something, and then a few code characters show up in the buffers from the remote client. NiMUD simulates local echo by receiving characters from the remote host and then printing the characters that pass through a filter, discarding unwanted characters (sometimes telnet codes). This happens after the call to translate_telopts, however. It seems what is happening now that I have inserted your translate_telopts() is that during the first few lines it at first is set the same way (or close to properly for character mode) and then after one line of text, something is switching it back into line mode. I'm trying to figure out where you are sending those codes inside the telopt.c client.c etc... but I have not yet found this issue. Ideally, it would properly manage character mode, then switch into line mode only if MSSP needs it, then return the connection to character mode. The reason NiMUD does this is to interpret ansi keyboard codes like \x1b[C Any ideas how to stop this from happening? It seems once you've logged out, and you log in the second time, something goes awry with the ability to hit return. Weird. Code:
/*
* Read and place in buffer.
*/
bool read_from_connection( CONNECTION_DATA *d )
{
int iStart;
char ansiCode=' ';
/*
* Abort if pending command already.
*/
if ( d->incomm[0] != '\0' )
return TRUE;
/*
* Check for overflow.
*/
d->showing = iStart = strlen(d->inbuf);
if ( iStart >= sizeof(d->inbuf) - 10 )
{
sprintf( log_buf, "%s input overflow!", d->host );
log_string( log_buf );
write_to_connection( d->connection,
"\n\r*** BUFFER OVERFLOW ***\n\r", 0 );
return FALSE;
}
for ( ; ; )
{
int nRead;
nRead = read( d->connection, d->inbuf + iStart,
sizeof(d->inbuf) - 10 - iStart );
if ( nRead > 0 )
{
d->showing=iStart;
iStart += translate_telopts(d, d->inbuf + iStart, nRead, d->inbuf+iStart );
if( d->inbuf[iStart - 1] == '\n' )
break;
}
else if ( nRead == 0 )
{
char buf[MAX_STRING_LENGTH];
if ( d != NULL && d->character != NULL
&& str_cmp( d->character->name, "INFO" ) ) {
wtf_logf( "%s disconnected.", NAME(d->character) );
snprintf( buf, MAX_STRING_LENGTH, "Notify> %s has disconnected (EOF).",
(d != NULL && d->character != NULL)
? d->character->name : "Guest" );
NOTIFY( buf, LEVEL_IMMORTAL, WIZ_NOTIFY_LOGIN );
}
return FALSE;
}
else if ( errno == EWOULDBLOCK ) break;
else
{
perror( "Read_from_connection" );
return FALSE;
}
}
d->inbuf[iStart] = '\0';
return TRUE;
}
void new_connection( int c )
{
char buf[MAX_STRING_LENGTH];
CONNECTION_DATA *dnew;
BAN_DATA *pban;
struct sockaddr_in sock;
struct hostent *from;
int desc;
unsigned int size;
extern bool fBootDb;
size = sizeof(sock);
getsockname( c, (struct sockaddr *) &sock, &size );
if ( ( desc = accept( c, (struct sockaddr *) &sock, &size) ) < 0 )
{
perror( "New_connection: accept" );
return;
}
#if !defined(FNDELAY)
#define FNDELAY O_NDELAY
#endif
if ( fcntl( desc, F_SETFL, FNDELAY ) == -1 )
{
perror( "New_connection: fcntl: FNDELAY" );
return;
}
/*
* Cons a new connection.
*/
dnew = new_connection_data( );
dnew->connection = desc;
size = sizeof(sock);
if ( getpeername( desc, (struct sockaddr *) &sock, &size ) < 0 )
{
perror( "New_connection: getpeername" );
dnew->host = str_dup( "(unknown)" );
}
else
{
/*
* Would be nice to use inet_ntoa here but it takes a struct arg,
* which ain't very compatible between gcc and system libraries.
*/
int addr;
addr = ntohl( sock.sin_addr.s_addr );
snprintf( buf, MAX_STRING_LENGTH, "%d.%d.%d.%d",
( addr >> 24 ) & 0xFF, ( addr >> 16 ) & 0xFF,
( addr >> 8 ) & 0xFF, ( addr ) & 0xFF
);
sprintf( log_buf, "Sock.sinaddr: %s", buf );
log_string( log_buf );
.
.
.
/*
* Init connection data.
*/
dnew->showing=0;
dnew->next = connection_list;
connection_list = dnew;
/*
* Send the greeting.
*/
if ( !fBootDb )
{
extern char * help_greeting;
// IAC WONT LINEMODE IAC WILL (373) ECHO
write_to_buffer(dnew, "\377\375\042\377\373\001",6); // throws telnet into character mode
write_to_buffer(dnew, VERSION_STR, 0 );
write_to_buffer(dnew, "\n\r", 0 );
if ( help_greeting[0] == '.' )
write_to_buffer( dnew, help_greeting+1, 0 );
else
write_to_buffer( dnew, help_greeting , 0 );
}
else write_to_buffer( dnew, "Please wait.\n\r", 0 );
return;
}
/*
* Transfer one line from input buffer to input line.
*/
void read_from_buffer( CONNECTION_DATA *d )
{
int i, j, k;
/*
* Hold horses if pending command already.
*/
// if ( d->incomm[0] != '\0' )
// return;
/*
* Look for at least one new line.
*/
for ( i = 0; d->inbuf[i] != '\n' && d->inbuf[i] != '\r'; i++ )
{
if ( d->inbuf[i] == '\0' ) {
d->showing=i;
return;
}
if ( d->character && d->inbuf[i] == '\x1b' ) {
if ( d->inbuf[i+1] == '[' ) {
char acode[5];
acode[0] = '['; acode[1] = d->inbuf[i+2]; acode[2] = d->inbuf[i+3];
if ( d->inbuf[i+3] == '~' ) acode[3]='\0';
else if ( d->inbuf[i+4] == '~' ) { acode[3]=d->inbuf[i+4]; acode[4]='\0'; }
else acode[2] = '\0';
ansi_keyboard( d->character, acode );
d->inbuf[0]='\0'; d->showing=0; return;
}
} else
if ( i >= d->showing && DC(d) != CON_GET_NEW_PASSWORD
&& DC(d) != CON_CONFIRM_NEW_PASSWORD
&& DC(d) != CON_GET_OLD_PASSWORD ) {
if ( d->inbuf[i] == '\b' || d->inbuf[i] == 127 ) { char b[3]; b[0]='\b'; b[1]=' '; b[2]='\b';
write_to_connection( d->connection, b, 3 ); d->showing=i;
} else
if ( char_isof(d->inbuf[i],
" `1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>?" )
) { char b[2]; b[0]=d->inbuf[i]; b[1]='\0';
write_to_connection( d->connection, b, 1 ); d->showing=i; } //simulated local echo
}
} // end for
.
. (Canonical input processing)
.
}
Last edited by locke : 03-18-2009 at 09:15 PM. |
|
|
|
|
|
|
#13 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
For starters, to push a telnet client into character mode you need to send:
IAC WILL SUPPRESS GA IAC WILL ECHO For MSSP you need to send on connect: IAC WILL MSSP The write_to_descriptor calls should be replaced with whatever function NiMUD uses, so that should probably be write_to_connection. You won't need client.c which is just for debugging, and the same goes for mud.c. The call to translate_telopts looks alright. |
|
|
|
|
|
#14 |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Unfortunately I had to remove that line to translate_telopt() because the number it was returning was messing up my connection. Like I said when I logged back in something was awry the second time and I couldn't hit return. When I removed the translate_telopt line, this problem went way.
I will check into those codes for character mode, but I cannot find where IAC 0 0 is sent or where IAC 34 255 is sent. For now I've removed it until I can spend more time with it. The reason I chose yours is because I didn't know if it was cleaner or something. When I used the SUPPRESS_GA code, it worked from telnet at a linux prompt but PuTTy still doesn't seem to realize this properly. The write_* I have is: Code:
/*
* Lowest level output function.
* Write a block of text to the file connection.
*/
bool write_to_connection( int desc, char *txt, int length )
{
int iStart;
int nWrite;
int nBlock;
#if defined(macintosh) || defined(MSDOS)
if ( desc == 0 )
desc = 1;
#endif
if ( length <= 0 )
length = strlen(txt);
for ( iStart = 0; iStart < length; iStart += nWrite )
{
nBlock = UMIN( length - iStart, 4096 );
if ( ( nWrite = write( desc, txt + iStart, nBlock ) ) < 0 )
{
perror( "Write_to_connection" );
return FALSE;
}
}
return TRUE;
}
Last edited by locke : 03-18-2009 at 11:11 PM. |
|
|
|
|
|
#15 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
Looks like write_to_connection does the same like write_to_descriptor does in merc, so it should be safe to use it.
You really wouldn't want to be using functions from mud.c since those are just dummies. Not entirely sure what's going wrong and if it's related to mth. Other than a clean compile and adding some log calls to check what's going on I don't have any suggestions. |
|
|
|
|
|
#16 | |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
I'm not sure either why it would lock up on <enter> What I mean by that is you can type but you can't hit return. My guess is that the number iStart is being set to is the problem. One other inconsistency was that I do not use a static size for the inbuf, which you did. Also, the signedness issues bring in to question stability. I'd love to use this code and distribute it with my package, but until we can figure this out I haven't got a clue. |
|
|
|
|
|
|
#17 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
One thing is that mth strips out the \r character, that might be an issue? If your code checks for \r\n that would break it. So either remove the \r stripping, or change your code to only check for a \n. I'd do the latter since that's a lot easier.
|
|
|
|
|
|
#18 |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
It checks for either with an || , why would that matter?
|
|
|
|
|
|
#19 | |||
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
Does this mean I call announce_support()? This is being done right after the above. Quote:
Quote:
When you login to the mud, it writes a Y with two dots at the prompt in PuTTy. This problem existed before, I'm not sure why it was happening, but it apparently is still happening. I'm using 3 for SUPPRESS_GA. It seems to only work properly with linux telnet, but the random character appears differently as a ". |
|||
|
|
|
|
|
#20 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
Seems to be sending out the requests now, but it's not answering.
Other muds haven't had any issues adding mth, so I guess you'll need to do some debugging and figure out what goes wrong. |
|
|
|
|
|
#21 | |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
Code:
char bufin[MAX_INPUT_LENGTH];
int nRead;
nRead = read( d->descriptor, bufin, sizeof( bufin ) - 10 - iStart );
if( nRead > 0 )
{
iStart += translate_telopts(d, bufin, nRead, d->inbuf + iStart);
if( d->inbuf[iStart - 1] == '\n' )
break;
}
Is there an easy way to modify this so that it doesn't use a static buffer? EDIT: The following code was used: Code:
for ( ; ; )
{
char bufin[MIL];
int nRead;
nRead = read( d->connection, bufin,//d->inbuf + iStart,
sizeof(bufin)-10-iStart ); // sizeof(d->inbuf) - 10 - iStart );
if ( nRead > 0 )
{
d->showing=iStart;
// iStart += nRead;
iStart += translate_telopts(d, bufin, nRead, d->inbuf+iStart );
if( d->inbuf[iStart - 1] == '\n'
|| d->inbuf[iStart - 1] == '\r' )
break;
}
Code:
for ( ; ; )
{
char buf_discard[MIL];
int nRead;
nRead = read( d->connection, /* bufin, */ d->inbuf + iStart,
/* sizeof(bufin)-10-iStart ); */ sizeof(d->inbuf) - 10 - iStart );
if ( nRead > 0 )
{
d->showing=iStart;
iStart += nRead;
translate_telopts(d, d->inbuf+iStart, nRead, buf_discard );
if( d->inbuf[iStart - 1] == '\n'
|| d->inbuf[iStart - 1] == '\r' )
break;
}
UPDATE: Spoke too soon, it's causing crashes. I'm trying to figure out why, but I'm inside translate_telopts() at this point. I don't see anything, so I'm left to wonder what exactly I should do next. I've tried this several ways. Last edited by locke : 03-19-2009 at 11:21 AM. |
|
|
|
|
|
|
#22 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
Remove the stripping of \\r in telopt.c and see if that makes a difference, it's the lines:
Code:
case '\r':
pti++;
srclen--;
break;
Try the following after that: Code:
for ( ; ; )
{
char bufin[MIL];
int nRead;
nRead = read( d->connection, bufin, sizeof(bufin)-10-iStart );
if ( nRead > 0 )
{
d->showing=iStart;
iStart += translate_telopts(d, bufin, nRead, d->inbuf+iStart );
if( d->inbuf[iStart - 1] == '\n'
|| d->inbuf[iStart - 1] == '\r' )
break;
|
|
|
|
|
|
#23 | |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
|
|
|
|
|
|
|
#24 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
Odd, I'm at a loss.
|
|
|
|
|
|
#25 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
You're using calloc instead of malloc, right?
Calloc automatically zeroes the memory, otherwise odd things might happen. Regardless, I added a non telnet version to the MSSP specification which should be easier to implement. MSSP Plaintext Since it's not feasible for every mud to implement telopt negotiations a plaintext alternative is available. Whenever a new connection enters the command: MSSP-REQUEST a Mud supporting MSSP Plaintext should send the following: \r\nMSSP-REPLY-START\r\nvariable\tvalue\r\nvariable\tvalue\r\nMSS P-REPLY-END\r\n If a variable has multiple values you can use multiple tabs: \r\nMSSP-REPLY-START\r\nvariable\tvalue\tvalue\r\nMSSP-REPLY-END\r\n |
|
|
|
|
|
#26 | |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
I use malloc() Maybe you could write a little piece of code that checks for the request in a string and a variant of the MSSP send routine that maps to mud_data, so I can install that. I manually assign or use memset() to init variables to 0. Last edited by locke : 03-20-2009 at 11:42 AM. |
|
|
|
|
|
|
#27 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
You'd want to set everything to NULL, notably d->mccp and d->teltop. Also make sure that d->terminal_type is handled correctly.
What you can do as well is to disable negotiating anything but MSSP in tables.c just in case the crash is in one of the other negotiations. |
|
|
|
|
|
#28 | |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
What do you mean by "disable negotiating anything but MSSP"? |
|
|
|
|
|
|
#29 |
|
Senior Member
Join Date: Jun 2004
Posts: 251
![]() |
Re: MSSP (Mud Server Status Protocol)
The announce_support function looks through the telnet table in tables.c for entries that are flagged to send a WILL or DO request, setting the flag to 0 will disable the auto announce.
|
|
|
|
|
|
#30 | |
|
Banned
Join Date: Jan 2009
Home MUD: nimud.divineright.org 5333
Posts: 195
![]() |
Re: MSSP (Mud Server Status Protocol)
Quote:
Code:
** glibc detected *** nimud: free(): invalid pointer: 0x08974840 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7df8a00]
/lib/libc.so.6(cfree+0x89)[0xb7dfa6f9]
nimud[0x80d63d0]
nimud[0x80d65d6]
nimud[0x80a54bf]
nimud[0x80a5d42]
nimud[0x80a61f0]
nimud[0x80a6579]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb7da8fdc]
nimud[0x80493d1]
======= Memory map: ========
08048000-080fe000 r-xp 00000000 fd:02 699939 /home/locke/NiM5/area/nimud
080fe000-080ff000 r--p 000b5000 fd:02 699939 /home/locke/NiM5/area/nimud
080ff000-08100000 rw-p 000b6000 fd:02 699939 /home/locke/NiM5/area/nimud
08100000-08b7f000 rw-p 08100000 00:00 0 [heap]
b7600000-b7621000 rw-p b7600000 00:00 0
b7621000-b7700000 ---p b7621000 00:00 0
b778f000-b7798000 r-xp 00000000 03:03 551806 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libgcc_s.so.1
b7798000-b7799000 r--p 00008000 03:03 551806 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libgcc_s.so.1
b7799000-b779a000 rw-p 00009000 03:03 551806 /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/libgcc_s.so.1
b779a000-b77a2000 r-xp 00000000 03:03 471790 /lib/libnss_files-2.6.1.so
b77a2000-b77a3000 r--p 00007000 03:03 471790 /lib/libnss_files-2.6.1.so
b77a3000-b77a4000 rw-p 00008000 03:03 471790 /lib/libnss_files-2.6.1.so
b77a4000-b77cd000 rw-p b77a4000 00:00 0
b77ce000-b7d93000 rw-p b77ce000 00:00 0
b7d93000-b7ebd000 r-xp 00000000 03:03 471810 /lib/libc-2.6.1.so
b7ebd000-b7ebf000 r--p 0012a000 03:03 471810 /lib/libc-2.6.1.so
b7ebf000-b7ec0000 rw-p 0012c000 03:03 471810 /lib/libc-2.6.1.so
b7ec0000-b7ec3000 rw-p b7ec0000 00:00 0
b7ec3000-b7ed4000 r-xp 00000000 03:03 423374 /lib/libz.so.1.2.3
b7ed4000-b7ed5000 r--p 00010000 03:03 423374 /lib/libz.so.1.2.3
b7ed5000-b7ed6000 rw-p 00011000 03:03 423374 /lib/libz.so.1.2.3
b7ed6000-b7edb000 r-xp 00000000 03:03 472037 /lib/libcrypt-2.6.1.so
b7edb000-b7edc000 r--p 00004000 03:03 472037 /lib/libcrypt-2.6.1.so
b7edc000-b7edd000 rw-p 00005000 03:03 472037 /lib/libcrypt-2.6.1.so
b7edd000-b7f05000 rw-p b7edd000 00:00 0
b7f0b000-b7f25000 r-xp 00000000 03:03 471982 /lib/ld-2.6.1.so
b7f25000-b7f26000 r--p 00019000 03:03 471982 /lib/ld-2.6.1.so
b7f26000-b7f27000 rw-p 0001a000 03:03 471982 /lib/ld-2.6.1.so
bf2e8000-bfa6c000 rw-p bf87c000 00:00 0 [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
|
|
|
|
|