icqplugin.cpp
上传用户:zslianheng
上传日期:2013-04-03
资源大小:946k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Visual C++

  1. /***************************************************************************
  2.  *                                                                         *
  3.  *   This program is free software; you can redistribute it and/or modify  *
  4.  *   it under the terms of the GNU General Public License as published by  *
  5.  *   the Free Software Foundation; either version 2 of the License, or     *
  6.  *   (at your option) any later version.                                   *
  7.  *                                                                         *
  8.  *   copyright            : (C) 2002 by Zhang Yong                         *
  9.  *   email                : z-yong163@163.com                              *
  10.  ***************************************************************************/
  11. #include "icqplugin.h"
  12. #include "icqsocket.h"
  13. #include "icqclient.h"
  14. PtrList PluginFactory::pluginList;
  15. PLUGINMAP PluginFactory::pluginMap;
  16. void ExePlugin::execClient(IcqContact *c)
  17. {
  18. string cmd;
  19. getCmd(cmd, clientCmd.c_str(), c);
  20. execCmd(cmd.c_str());
  21. }
  22. void ExePlugin::execServer(IcqContact *c)
  23. {
  24. string cmd;
  25. getCmd(cmd, clientCmd.c_str(), c);
  26. execCmd(cmd.c_str());
  27. }
  28. void ExePlugin::getCmd(string &cmd, const char *line, IcqContact *c)
  29. {
  30. char buf[1024];
  31. char *p = buf;
  32. while (*line && !isspace(*line))
  33. *p++ = *line++;
  34. while (*line) {
  35. if (*line == '%') {
  36. ++line;
  37. if (*line != '%') {
  38. char word[256];
  39. char *tmp = word;
  40. while (*line && !isspace(*line))
  41. *tmp++ = *line++;
  42. *tmp = '';
  43. char s[128];
  44. if (stricmp(word, "ip") == 0) {
  45. in_addr addr;
  46. addr.s_addr = htonl(c->ip);
  47. strcpy(s, inet_ntoa(addr));
  48. } else
  49. strcpy(s, word);
  50. int n = strlen(s);
  51. memcpy(p, s, n);
  52. p += n;
  53. }
  54. }
  55. if (*line)
  56. *p++ = *line++;
  57. }
  58. *p = '';
  59. cmd = buf;
  60. }
  61. bool PluginFactory::init()
  62. {
  63. return true;
  64. }
  65. void PluginFactory::destroy()
  66. {
  67. PtrList::iterator it;
  68. for (it = pluginList.begin(); it != pluginList.end(); ++it)
  69. delete (IcqPlugin *) *it;
  70. pluginList.clear();
  71. }
  72. bool PluginFactory::registerPlugin(IcqPlugin *p)
  73. {
  74. if (!pluginMap.insert(PLUGINMAP::value_type(p->name, p)).second)
  75. return false;
  76. pluginList.push_back(p);
  77. return true;
  78. }