X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fservice.cc;fp=src%2Fmoof%2Fservice.cc;h=869b541344f4e9e79b6b36a3a8b1499a6a06af31;hp=0000000000000000000000000000000000000000;hb=831f04d4bc19a390415ac0bbac4331c7a65509bc;hpb=299af4f2047e767e5d79501c26444473bda64c64 diff --git a/src/moof/service.cc b/src/moof/service.cc new file mode 100644 index 0000000..869b541 --- /dev/null +++ b/src/moof/service.cc @@ -0,0 +1,81 @@ + +/*] Copyright (c) 2009-2010, Charles McGarvey [************************** +**] All rights reserved. +* +* vi:ts=4 sw=4 tw=75 +* +* Distributable under the terms and conditions of the 2-clause BSD license; +* see the file COPYING for a complete text of the license. +* +**************************************************************************/ + +#include "service.hh" +#include "socket.hh" + + +#define SOLICIT 0x1234ABCD +#define RESPONSE 0xABCD1234 + + +namespace moof { + + +int service::handle_packet(socket_multiplexer& mux, + packet& packet, + const socket::address& address) +{ + try + { + uint32_t magic; + packet >> magic; + if (magic == SOLICIT) + { + std::string type; + packet >> type; + if (type == type_) + { + packet.clear(); + packet << RESPONSE << type_ << name_ << text_; + mux.socket().write(packet); + return 0; + } + } + } + catch (...) {} + return -1; +} + +int service_finder::handle_packet(socket_multiplexer& mux, + packet& packet, + const socket::address& address) +{ + try + { + uint32_t magic; + packet >> magic; + if (magic == RESPONSE) + { + std::string type; + packet >> type; + if (type == type_) + { + std::string name; + std::string text; + packet >> name >> text; + service service(address, type, name, text); + services_.insert(std::make_pair(name, service)); + return 0; + } + } + } + catch (...) {} + return -1; +} + +service_finder::service_finder(const std::string& type, int sockType) +{ +} + + +} // namespace moof +