Guest User

Untitled

a guest
Mar 9th, 2018
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. ##parser.cc
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. /*
  7. #include "args.hpp"
  8. const int MESG_TYPE_NULL = 0;
  9. const int MESG_TYPE_USER = 1;
  10. const int MESG_TYPE_SERV = 2;
  11.  
  12. class IRC
  13. {
  14. private:
  15.  
  16.  
  17. public:
  18. IRC() {};
  19. ~IRC() {};
  20. void getline(args* ref, string const line);
  21. };
  22.  
  23. // interpret IRC protocol message
  24.  
  25. void IRC::getline(args* ref, string const line)
  26. {
  27. // Types of messages:
  28. 1. :user@host COMMAND [params]
  29. 2. :user@host COMMAND :text goes here
  30. 3. :server.name.ext COMMAND param1 param2 .. paramN
  31. 4. :server.name.ext COMMAND :text goes here
  32.  
  33. Notably identifable sections:
  34. Token 1 (user or server)
  35. Token 3 (parameter list | list of text sent to irc service)
  36. //
  37.  
  38. string buffer, tempor, temp;
  39. int i=0, j=0, k=0, l=0;
  40. int endpos=0, start= 0, finis= 0;
  41. int next=0; args& message=(*ref);
  42. message.MesgType = MESG_TYPE_NULL;
  43.  
  44. // Look for first next
  45. for (i=0; i < line.size() && line.at(i) != ' '; ++i)
  46. temp.push_back(line.at(i));
  47.  
  48. for (i=0; i < temp.size(); ++i)
  49. {
  50. switch (temp.at(i))
  51. {
  52. // it's a nickname
  53. case '@':
  54. if (message.MesgType == MESG_TYPE_NULL) {
  55. message.MesgType = MESG_TYPE_USER;
  56. }
  57. break;
  58.  
  59. // it's a server
  60. case '.':
  61. if (message.MesgType == MESG_TYPE_NULL) {
  62. message.MesgType = MESG_TYPE_SERV;
  63. }
  64. break;
  65. }
  66. }
  67.  
  68. // From here on, we split into message types
  69. switch (message.MesgType)
  70. {
  71. case MESG_TYPE_USER:
  72. // loop message param list until we see ':'; ++i
  73. for (i=0; i < line.size() && line[i] != ':'; ++i)
  74. {
  75. if (line[i-1] == ' ') {
  76. start= i; finis= 0;
  77.  
  78. }
  79.  
  80. if (line[i+1] == ' ') {
  81. finis= i;
  82. buffer = line.substr(start, finis);
  83. }
  84.  
  85. if (finis > 0) {
  86. cout << buffer << endl;
  87. buffer.clear();
  88. }
  89.  
  90. // message.Params.push_back(temp.substr(start, finis));
  91. }
  92.  
  93.  
  94. *
  95. start = 0; finis = 0;
  96. for (i=l+1; temp[i-1] != ':' && i < temp.size(); ++i)
  97. {
  98. if (temp[i-1] == ' ' && i < temp.length())
  99. start = i;
  100.  
  101. if (temp[i+1] == ' ' && i < temp.length()) {
  102. finis = i;
  103. message.Params.push_back(temp.substr(start, finis));
  104. }
  105. cout << temp.substr(start, finis) << endl;
  106. }
  107.  
  108.  
  109. for (i=l+1; temp[i-1] != ':' && i < temp.size(); ++i)
  110. start = i;
  111.  
  112. for (i=start+1; i < temp.size(); ++i)
  113. message.Params.push_back(temp.substr(i, 1));
  114. *
  115. break;
  116.  
  117. case MESG_TYPE_SERV:
  118. break;
  119. }
  120. }
  121. */
  122. char *irctok(string& line)
  123. {
  124. char *buffer = (char *)line.c_str();
  125. char array[255];
  126.  
  127. int count = 0;
  128. if (buffer[0] == ':') {
  129. buffer++;
  130. }
  131.  
  132. for (; *buffer; buffer++)
  133. {
  134. if (*buffer == ':')
  135. {
  136. array[count++] = buffer + 1;
  137. break;
  138. }
  139. else if (*buffer == ' ') { *buffer = 0; }
  140. else
  141. {
  142. array[count++] = buffer;
  143. if (count == size) { break; }
  144. for (; *buffer != ' '; buffer++) {
  145. if (!*buffer) { return count; }
  146. }
  147.  
  148. *buffer = 0;
  149. }
  150. }
  151.  
  152. return array;
  153. }
  154.  
  155.  
  156.  
  157. int main()
  158. {
  159. string line(":robert_!me@r-butler.net OPER robert_ SomePaSSwORd :parameter");
  160. //IRC parser;
  161. //args message;
  162. //parser.getline(&message, line);
  163.  
  164. char *parv = irctok(line);
  165.  
  166. cout << "Src Nick: " << message[0] << endl
  167. << "Dst Nick: " << message[1] << endl
  168. << "Message : " << message[2] << endl;
  169.  
  170. return 0;
  171. }
Add Comment
Please, Sign In to add comment