From 65a8d8d08266b7724705d23acca1284b47d4ed97 Mon Sep 17 00:00:00 2001 From: sneak Date: Wed, 21 Aug 2019 21:07:47 +0200 Subject: [PATCH] latest, needs adjustment for server responses --- main.go | 31 ++++--- sircd/responses.go | 208 +++++++++++++++++++++++++++++++++++++++++++++ sircd/server.go | 9 +- 3 files changed, 231 insertions(+), 17 deletions(-) create mode 100644 sircd/responses.go diff --git a/main.go b/main.go index 38f2a6f..26b34b4 100644 --- a/main.go +++ b/main.go @@ -13,7 +13,6 @@ var Buildarch string func main() { - c := viper.New() // default config variables c.SetDefault("myhostname", "irc.example.com") @@ -35,24 +34,24 @@ func main() { panic(fmt.Errorf("Fatal error config file: %s \n", err)) } - // this is the only config settable by env var by design - // do everything else in the config file - if os.Getenv("DEBUG") != "" { - c.Set("loglevel", "debug") - } + // this is the only config settable by env var by design + // do everything else in the config file + if os.Getenv("DEBUG") != "" { + c.Set("loglevel", "debug") + } // set up logging log := logrus.New() - log.SetReportCaller(false) - switch c.GetString("loglevel") { - case "error": - log.SetLevel(logrus.ErrorLevel) - case "info": - log.SetLevel(logrus.InfoLevel) - default: - log.SetLevel(logrus.DebugLevel) - log.SetReportCaller(true) - } + log.SetReportCaller(false) + switch c.GetString("loglevel") { + case "error": + log.SetLevel(logrus.ErrorLevel) + case "info": + log.SetLevel(logrus.InfoLevel) + default: + log.SetLevel(logrus.DebugLevel) + log.SetReportCaller(true) + } // instantiate server s := sircd.New(c) // give it our logger diff --git a/sircd/responses.go b/sircd/responses.go new file mode 100644 index 0000000..017ecbd --- /dev/null +++ b/sircd/responses.go @@ -0,0 +1,208 @@ +package sircd + +import log "github.com/sirupsen/logrus" + +type ircServerResponse struct { + code uint16 + symbol string + longtext string + params *[]string +} + +func NewIrcServerResponse(code uint16, params *[]string) { + codes := ircResponseCodes() + r := new(ircServerResponse) + r.code = code + r.symbol = (*codes)[code] + r.params = params +} + +func ircResponseCodes() *map[uint16]string { + responseCodeList := map[uint16]string{ + 1: "RPL_WELCOME", + 2: "RPL_YOURHOST", + 3: "RPL_CREATED", + 4: "RPL_MYINFO", + 5: "RPL_ISUPPORT", + 10: "RPL_BOUNCE", + 15: "RPL_MAP", + 17: "RPL_MAPEND", + 18: "RPL_MAPSTART", + 20: "RPL_HELLO", + 42: "RPL_YOURID", + 43: "RPL_SAVENICK", + 200: "RPL_TRACELINK", + 201: "RPL_TRACECONNECTING", + 202: "RPL_TRACEHANDSHAKE", + 203: "RPL_TRACEUNKNOWN", + 204: "RPL_TRACEOPERATOR", + 205: "RPL_TRACEUSER", + 206: "RPL_TRACESERVER", + 207: "RPL_TRACESERVICE", + 208: "RPL_TRACENEWTYPE", + 209: "RPL_TRACECLASS", + 211: "RPL_STATSLINKINFO", + 212: "RPL_STATSCOMMANDS", + 213: "RPL_STATSCLINE", + 214: "RPL_STATSNLINE", + 215: "RPL_STATSILINE", + 216: "RPL_STATSKLINE", + 217: "RPL_STATSQLINE", + 218: "RPL_STATSYLINE", + 219: "RPL_ENDOFSTATS", + 221: "RPL_UMODEIS", + 231: "RPL_SERVICEINFO", + 232: "RPL_ENDOFSERVICES", + 233: "RPL_SERVICE", + 234: "RPL_SERVLIST", + 235: "RPL_SERVLISTEND", + 239: "RPL_STATSIAUTH", + 240: "RPL_STATSVLINE", + 241: "RPL_STATSLLINE", + 242: "RPL_STATSUPTIME", + 243: "RPL_STATSOLINE", + 244: "RPL_STATSHLINE", + 245: "RPL_STATSSLINE", + 246: "RPL_STATSPING", + 247: "RPL_STATSBLINE", + 248: "RPL_STATSDEFINE", + 249: "RPL_STATSDEBUG", + 250: "RPL_STATSDLINE", + 251: "RPL_LUSERCLIENT", + 252: "RPL_LUSEROP", + 253: "RPL_LUSERUNKNOWN", + 254: "RPL_LUSERCHANNELS", + 255: "RPL_LUSERME", + 256: "RPL_ADMINME", + 257: "RPL_ADMINLOC1", + 258: "RPL_ADMINLOC2", + 259: "RPL_ADMINEMAIL", + 261: "RPL_TRACELOG", + 262: "RPL_TRACEEND", + 263: "RPL_TRYAGAIN", + 265: "RPL_LOCALUSERS", + 266: "RPL_GLOBALUSERS", + 300: "RPL_NONE", + 301: "RPL_AWAY", + 302: "RPL_USERHOST", + 303: "RPL_ISON", + 304: "RPL_TEXT", + 305: "RPL_UNAWAY", + 306: "RPL_NOWAWAY", + 311: "RPL_WHOISUSER", + 312: "RPL_WHOISSERVER", + 313: "RPL_WHOISOPERATOR", + 314: "RPL_WHOWASUSER", + 315: "RPL_ENDOFWHO", + 316: "RPL_WHOISCHANOP", + 317: "RPL_WHOISIDLE", + 318: "RPL_ENDOFWHOIS", + 319: "RPL_WHOISCHANNELS", + 321: "RPL_LISTSTART", + 322: "RPL_LIST", + 323: "RPL_LISTEND", + 324: "RPL_CHANNELMODEIS", + 325: "RPL_UNIQOPIS", + 331: "RPL_NOTOPIC", + 332: "RPL_TOPIC", + 333: "RPL_TOPIC_WHO_TIME", + 341: "RPL_INVITING", + 342: "RPL_SUMMONING", + 344: "RPL_REOPLIST", + 345: "RPL_ENDOFREOPLIST", + 346: "RPL_INVITELIST", + 347: "RPL_ENDOFINVITELIST", + 348: "RPL_EXCEPTLIST", + 349: "RPL_ENDOFEXCEPTLIST", + 351: "RPL_VERSION", + 352: "RPL_WHOREPLY", + 353: "RPL_NAMREPLY", + 361: "RPL_KILLDONE", + 362: "RPL_CLOSING", + 363: "RPL_CLOSEEND", + 364: "RPL_LINKS", + 365: "RPL_ENDOFLINKS", + 366: "RPL_ENDOFNAMES", + 367: "RPL_BANLIST", + 368: "RPL_ENDOFBANLIST", + 369: "RPL_ENDOFWHOWAS", + 371: "RPL_INFO", + 372: "RPL_MOTD", + 373: "RPL_INFOSTART", + 374: "RPL_ENDOFINFO", + 375: "RPL_MOTDSTART", + 376: "RPL_ENDOFMOTD", + 381: "RPL_YOUREOPER", + 382: "RPL_REHASHING", + 383: "RPL_YOURESERVICE", + 384: "RPL_MYPORTIS", + 385: "RPL_NOTOPERANYMORE", + 391: "RPL_TIME", + 392: "RPL_USERSSTART", + 393: "RPL_USERS", + 394: "RPL_ENDOFUSERS", + 395: "RPL_NOUSERS", + 401: "ERR_NOSUCHNICK", + 402: "ERR_NOSUCHSERVER", + 403: "ERR_NOSUCHCHANNEL", + 404: "ERR_CANNOTSENDTOCHAN", + 405: "ERR_TOOMANYCHANNELS", + 406: "ERR_WASNOSUCHNICK", + 407: "ERR_TOOMANYTARGETS", + 408: "ERR_NOSUCHSERVICE", + 409: "ERR_NOORIGIN", + 411: "ERR_NORECIPIENT", + 412: "ERR_NOTEXTTOSEND", + 413: "ERR_NOTOPLEVEL", + 414: "ERR_WILDTOPLEVEL", + 415: "ERR_BADMASK", + 416: "ERR_TOOMANYMATCHES", + 421: "ERR_UNKNOWNCOMMAND", + 422: "ERR_NOMOTD", + 423: "ERR_NOADMININFO", + 424: "ERR_FILEERROR", + 431: "ERR_NONICKNAMEGIVEN", + 432: "ERR_ERRONEOUSNICKNAME", + 433: "ERR_NICKNAMEINUSE", + 434: "ERR_SERVICENAMEINUSE", + 435: "ERR_SERVICECONFUSED", + 436: "ERR_NICKCOLLISION", + 437: "ERR_UNAVAILRESOURCE", + 441: "ERR_USERNOTINCHANNEL", + 442: "ERR_NOTONCHANNEL", + 443: "ERR_USERONCHANNEL", + 444: "ERR_NOLOGIN", + 445: "ERR_SUMMONDISABLED", + 446: "ERR_USERSDISABLED", + 451: "ERR_NOTREGISTERED", + 461: "ERR_NEEDMOREPARAMS", + 462: "ERR_ALREADYREGISTRED", + 463: "ERR_NOPERMFORHOST", + 464: "ERR_PASSWDMISMATCH", + 465: "ERR_YOUREBANNEDCREEP", + 466: "ERR_YOUWILLBEBANNED", + 467: "ERR_KEYSET", + 471: "ERR_CHANNELISFULL", + 472: "ERR_UNKNOWNMODE", + 473: "ERR_INVITEONLYCHAN", + 474: "ERR_BANNEDFROMCHAN", + 475: "ERR_BADCHANNELKEY", + 476: "ERR_BADCHANMASK", + 477: "ERR_NOCHANMODES", + 478: "ERR_BANLISTFULL", + 481: "ERR_NOPRIVILEGES", + 482: "ERR_CHANOPRIVSNEEDED", + 483: "ERR_CANTKILLSERVER", + 484: "ERR_RESTRICTED", + 485: "ERR_UNIQOPRIVSNEEDED", + 491: "ERR_NOOPERHOST", + 492: "ERR_NOSERVICEHOST", + 499: "ERR_STATSKLINE", + 501: "ERR_UMODEUNKNOWNFLAG", + 502: "ERR_USERSDONTMATCH", + 708: "RPL_ETRACEFULL", + 759: "RPL_ETRACEEND", + } + log.Fatalf("%+v", responseCodeList) + return &responseCodeList +} diff --git a/sircd/server.go b/sircd/server.go index 1e227f3..495963e 100644 --- a/sircd/server.go +++ b/sircd/server.go @@ -19,6 +19,7 @@ type ircd struct { c *viper.Viper } +// FIXME pull these from the config const ( CONN_HOST = "localhost" CONN_PORT = "6667" @@ -43,7 +44,13 @@ func (s *ircd) SetServerName(name string) { } func (s *ircd) Start() { - s.log.Infof("sircd version %s (%s) built %s by %s starting.", s.c.GetString("version"), s.c.GetString("buildarch"), s.c.GetString("buildtime"), s.c.GetString("builduser")) + s.log.Infof( + "sircd version %s (%s) built %s by %s starting.", + s.c.GetString("version"), + s.c.GetString("buildarch"), + s.c.GetString("buildtime"), + s.c.GetString("builduser"), + ) s.newClients = make(chan *ircClient, 128) s.deadClients = make(chan *ircClient, 128) s.messageQueue = make(chan *ircMessage, 128)