commit de6f08cc040240fdec662f18fb51d95859c4ab5a from: Alexander Barton date: Mon Nov 15 18:36:21 2010 UTC Merge branch 'numeric-329' * numeric-329: New numeric 329: get channel creation time on "MODE #chan" commands Save channel creation time; new function Channel_CreationTime() commit - 678d5411e23b3361ef32617f520d051109de8eef commit + de6f08cc040240fdec662f18fb51d95859c4ab5a blob - 175f23b253562118c9dc7f19b9fc82c0535187c4 blob + edbbc38bee3412d0c336833f34393bebab5323c8 --- src/ngircd/channel.c +++ src/ngircd/channel.c @@ -696,7 +696,15 @@ Channel_TopicWho(CHANNEL *Chan) assert(Chan != NULL); return Chan->topic_who; } /* Channel_TopicWho */ + +GLOBAL unsigned int +Channel_CreationTime(CHANNEL *Chan) +{ + assert(Chan != NULL); + return (unsigned int) Chan->creation_time; +} /* Channel_CreationTime */ + #endif @@ -834,6 +842,9 @@ Channel_Create( const char *Name ) strlcpy( c->name, Name, sizeof( c->name )); c->hash = Hash( c->name ); c->next = My_Channels; +#ifndef STRICT_RFC + c->creation_time = time(NULL); +#endif My_Channels = c; LogDebug("Created new channel structure for \"%s\".", Name); return c; blob - 46e7e13a8df2f233f1f5ab0cb2c2fc93ca99ed42 blob + 030f9109ceff0eb7bbfa42d435ead49740dc29da --- src/ngircd/channel.h +++ src/ngircd/channel.h @@ -30,6 +30,7 @@ typedef struct _CHANNEL char modes[CHANNEL_MODE_LEN]; /* Channel modes */ array topic; /* Topic of the channel */ #ifndef STRICT_RFC + time_t creation_time; /* Channel creation time */ time_t topic_time; /* Time when topic was set */ char topic_who[CLIENT_NICK_LEN];/* Nickname of user that set topic */ #endif @@ -118,6 +119,7 @@ GLOBAL CHANNEL *Channel_Create PARAMS(( const char *Na #ifndef STRICT_RFC GLOBAL unsigned int Channel_TopicTime PARAMS(( CHANNEL *Chan )); GLOBAL char *Channel_TopicWho PARAMS(( CHANNEL *Chan )); +GLOBAL unsigned int Channel_CreationTime PARAMS(( CHANNEL *Chan )); #endif GLOBAL bool Channel_AddInvite PARAMS((CHANNEL *c, const char *Mask, bool OnlyOnce )); blob - df464a7dba7efca0058cdede4d18ec8090a7eeea blob + a4c1d89b330ed175bb02ea158c595693a22be11e --- src/ngircd/irc-mode.c +++ src/ngircd/irc-mode.c @@ -294,8 +294,17 @@ Channel_Mode_Answer_Request(CLIENT *Origin, CHANNEL *C if (the_args[0]) strlcat(the_modes, the_args, sizeof(the_modes)); - return IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG, - Client_ID(Origin), Channel_Name(Channel), the_modes); + if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG, + Client_ID(Origin), Channel_Name(Channel), + the_modes)) + return DISCONNECTED; +#ifndef STRICT_RFC + if (!IRC_WriteStrClient(Origin, RPL_CREATIONTIME_MSG, + Client_ID(Origin), Channel_Name(Channel), + Channel_CreationTime(Channel))) + return DISCONNECTED; +#endif + return CONNECTED; } blob - 03ddc363375c7633abd0234761eee4c8b2d67353 blob + 900d2ff1101a9f80d77cc6efc75194ca48fa07a4 --- src/ngircd/messages.h +++ src/ngircd/messages.h @@ -65,6 +65,7 @@ #define RPL_LIST_MSG "322 %s %s %ld :%s" #define RPL_LISTEND_MSG "323 %s :End of LIST" #define RPL_CHANNELMODEIS_MSG "324 %s %s +%s" +#define RPL_CREATIONTIME_MSG "329 %s %s %ld" #define RPL_NOTOPIC_MSG "331 %s %s :No topic is set" #define RPL_TOPIC_MSG "332 %s %s :%s" #define RPL_TOPICSETBY_MSG "333 %s %s %s %u"