Project

General

Profile

Download (2.3 KB) Statistics
| Branch: | Tag: | Revision:
ecdabe95 Marc Dequènes (Duck)
#--
# CyborgHood, a distributed system management software.
# Copyright (c) 2009-2010 Marc Dequènes (Duck) <Duck@DuckCorp.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++

d1e614b5 Marc Dequènes (Duck)
require 'cyborghood/cyborg/interface'
b7f7d214 Marc Dequènes (Duck)
require 'cyborghood/cyborg/conversation'
ecdabe95 Marc Dequènes (Duck)
module CyborgHood
b7f7d214 Marc Dequènes (Duck)
# default interface if not overridden
70c59c34 Marc Dequènes (Duck)
# a mere "BotClient" would then always have a default basic interface
bc473567 Marc Dequènes (Duck)
class EmptyInterface
include CyborgServerInterface
b7f7d214 Marc Dequènes (Duck)
include CyborgServerRootInterfaceAddon
bc473567 Marc Dequènes (Duck)
end

d57fd602 Marc Dequènes (Duck)
module BotNetClientUNIXSocket
45333094 Marc Dequènes (Duck)
def identifier_prefix
"unix_socket"
end

d57fd602 Marc Dequènes (Duck)
def peer_socket(peer)
File.join(Config::RUN_DIR, peer.downcase + ".sock")
end

def contact_peer(peer, &block)
if @comm_list.has_key? peer
block.call @comm_list[peer]
else
35e0fb89 Marc Dequènes (Duck)
begin
45333094 Marc Dequènes (Duck)
EventMachine.connect_unix_domain(peer_socket(peer), Conversation, self, block)
35e0fb89 Marc Dequènes (Duck)
rescue
block.call false
end
d57fd602 Marc Dequènes (Duck)
end
end
end

70c59c34 Marc Dequènes (Duck)
module BotNet
bc642412 Marc Dequènes (Duck)
attr_reader :interface

d57fd602 Marc Dequènes (Duck)
def self.included(base)
case Config.instance.botnet.connection_type
when 'unix_socket'
return base.class_eval("include BotNetClientUNIXSocket")
else
raise CyberError.new(:unrecoverable, "config", "Unknown botnet connection type")
end
end

d1e614b5 Marc Dequènes (Duck)
def setup
super
bc642412 Marc Dequènes (Duck)
@comm_list = {}
d1e614b5 Marc Dequènes (Duck)
end

bc642412 Marc Dequènes (Duck)
# used to quit properly and later to reuse communication channels
def register_communication(peer, conversation)
@comm_list[peer] = conversation
end

def unregister_communication(peer)
@comm_list.delete(peer)
d1e614b5 Marc Dequènes (Duck)
end

def ask_to_stop
bc642412 Marc Dequènes (Duck)
@comm_list.values.each {|conv| conv.bye }
d1e614b5 Marc Dequènes (Duck)
super
end

def interface
1c89625f Marc Dequènes (Duck)
EmptyInterface.instance
d1e614b5 Marc Dequènes (Duck)
end
end
ecdabe95 Marc Dequènes (Duck)
end