Module* Hook; /* I/O hooking module that we're attached to for this socket */
std::string ourchallenge; /* Challenge sent for challenge/response */
std::string theirchallenge; /* Challenge recv for challenge/response */
-
+ std::string OutboundPass; /* Outbound password */
+ bool sentcapab; /* Have sent CAPAB already */
public:
/** Because most of the I/O gubbins are encapsulated within
*/
void SetTheirChallenge(const std::string &c);
+ /** Compare two passwords based on authentication scheme
+ */
+ bool ComparePass(const std::string &ours, const std::string &theirs);
+
/** Return the module which we are hooking to for I/O encapsulation
*/
Module* GetHook();
*/
std::string RandString(unsigned int length);
+ /** Construct a password, optionally hashed with the other side's
+ * challenge string
+ */
+ std::string MakePass(const std::string &password, const std::string &challenge);
+
/** When an outbound connection finishes connecting, we receive
* this event, and must send our SERVER string to the other
* side. If the other side is happy, as outlined in the server
*/
virtual void OnError(InspSocketError e);
+ /** Sends an error to the remote server, and displays it locally to show
+ * that it was sent.
+ */
+ void SendError(const std::string &errormessage);
+
/** Handle socket disconnect event
*/
virtual int OnDisconnect();
/** FJOIN, similar to TS6 SJOIN, but not quite. */
bool ForceJoin(const std::string &source, std::deque<std::string> ¶ms);
- /** NICK command */
- bool IntroduceClient(const std::string &source, std::deque<std::string> ¶ms);
+ /** UID command */
+ bool ParseUID(const std::string &source, std::deque<std::string> ¶ms);
/** Send one or more FJOINs for a channel of users.
* If the length of a single line is more than 480-NICKMAX
bool OperQuit(const std::string &prefix, std::deque<std::string> ¶ms);
- /** Remote SQUIT (RSQUIT). Routing works similar to SVSNICK: Route it to the server that the target is connected to locally,
- * then let that server do the dirty work (squit it!). Example:
- * A -> B -> C -> D: oper on A squits D, A routes to B, B routes to C, C notices D connected locally, kills it. -- w00t
- */
- bool RemoteSquit(const std::string &prefix, std::deque<std::string> ¶ms);
-
/** SVSJOIN
*/
bool ServiceJoin(const std::string &prefix, std::deque<std::string> ¶ms);
virtual int OnIncomingConnection(int newsock, char* ip);
};
+/* Used to validate the value lengths of multiple parameters for a command */
+struct cmd_validation
+{
+ const char* item;
+ size_t param;
+ size_t length;
+};
+
+/* Used to validate the length values in CAPAB CAPABILITIES */
+struct cap_validation
+{
+ const char* reason;
+ const char* key;
+ size_t size;
+};
+
#endif