示例#1
0
文件: irc.c 项目: zackp30/IPoIRC
void* irc_thread_net(void *data) {
    irc_thread_data *self = (irc_thread_data*)data;
    irc_callbacks_t callbacks;
    irc_ctx_t ctx;
    irc_session_t *irc_s;

    void *socket = zmq_socket(self->d.context, ZMQ_PUSH); // "server" from irc -> tun
    int ret = zmq_connect(socket, "inproc://#irc_to_#tun");

    if (ret) {
        irc_debug(self, "(irc_thread_net) error when creating IPC socket - %s", zmq_strerror(errno));
        goto exit;
    }

    memset (&callbacks, 0, sizeof(callbacks));

    callbacks.event_connect = event_connect;
    callbacks.event_join = event_join;
    callbacks.event_privmsg = event_message;
    callbacks.event_channel = event_message;

    ctx.channel = strdup(self->chan);
    ctx.nick = malloc(sizeof(char)*512);
    snprintf(ctx.nick, 511, self->nick, rand());
    ctx.self = self;
    ctx.buffer = malloc(sizeof(char)*MTU*4);
    ctx.data = socket; // WE ARE PASSING A NON-THREAD-SAFE SOCKET HERE! </redwarning>

    irc_s = irc_create_session(&callbacks);
    if (!irc_s) {
        irc_debug(self, "error when creating irc_session");
        goto exit;
    }
    self->irc_s = irc_s;

    irc_debug(self, "created irc_session!");
    irc_set_ctx(self->irc_s, &ctx);

    if (irc_connect (self->irc_s, self->server, 6667, self->pass, ctx.nick, "ipoirc", "IP over IRC - http://github.com/EXio4/IPoIRC")) {
        irc_debug(self, "error when connecting to irc (%s)", irc_strerror(irc_errno(self->irc_s)));
        goto exit;
    }

    sleep(1); // wait for the network to answer THIS SHOULD BE DONE IN A RIGHT WAY!

    int rc = irc_run(self->irc_s);

    (void) rc;

    exit:
    if (self->irc_s) {
        irc_destroy_session(self->irc_s);
    }
    if (socket) {
        zmq_close(socket);
    }
    pthread_exit(NULL);
}
示例#2
0
int main (int argc, char **argv)
{
	irc_callbacks_t	callbacks;
	irc_ctx_t ctx;
	irc_session_t * s;

	if ( argc != 4 )
	{
		printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
		return 1;
	}

	memset (&callbacks, 0, sizeof(callbacks));

	callbacks.event_connect = event_connect;
	callbacks.event_join = event_join;
	callbacks.event_nick = dump_event;
	callbacks.event_quit = dump_event;
	callbacks.event_part = dump_event;
	callbacks.event_mode = dump_event;
	callbacks.event_topic = dump_event;
	callbacks.event_kick = dump_event;
	callbacks.event_channel = event_channel;
	callbacks.event_privmsg = event_privmsg;
	callbacks.event_notice = dump_event;
	callbacks.event_invite = dump_event;
	callbacks.event_umode = dump_event;
	callbacks.event_ctcp_rep = dump_event;
	callbacks.event_ctcp_action = dump_event;
	callbacks.event_unknown = dump_event;
	callbacks.event_numeric = event_numeric;

	callbacks.event_dcc_chat_req = irc_event_dcc_chat;
	callbacks.event_dcc_send_req = irc_event_dcc_send;

	s = irc_create_session (&callbacks);

	if ( !s )
	{
		printf ("Could not create session\n");
		return 1;
	}

	ctx.channel = argv[3];
    ctx.nick = argv[2];

	irc_set_ctx (s, &ctx);

	if ( irc_connect (s, argv[1], 6667, 0, argv[2], 0, 0) )
	{
		printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
		return 1;
	}

	irc_run (s);

	return 1;
}
示例#3
0
void dazeus::Server::connectToServer()
{
	printf("Connecting to server: %s\n", toString(this).c_str());
	assert( !config_->network->nickName.length() == 0 );

	irc_callbacks_t callbacks;
	memset(&callbacks, 0, sizeof(irc_callbacks_t));
	callbacks.event_connect = irc_callback;
	callbacks.event_nick = irc_callback;
	callbacks.event_quit = irc_callback;
	callbacks.event_join = irc_callback;
	callbacks.event_part = irc_callback;
	callbacks.event_mode = irc_callback;
	callbacks.event_umode = irc_callback;
	callbacks.event_topic = irc_callback;
	callbacks.event_kick = irc_callback;
	callbacks.event_channel = irc_callback;
#if LIBIRC_VERSION_HIGH > 1 || LIBIRC_VERSION_LOW >= 6
	callbacks.event_channel_notice = irc_callback;
#endif
	callbacks.event_privmsg = irc_callback;
	callbacks.event_notice = irc_callback;
	callbacks.event_invite = irc_callback;
	callbacks.event_ctcp_req = irc_callback;
	callbacks.event_ctcp_rep = irc_callback;
	callbacks.event_ctcp_action = irc_callback;
	callbacks.event_unknown = irc_callback;
	callbacks.event_numeric = irc_eventcode_callback;

	irc_ = (void*)irc_create_session(&callbacks);
	if(!irc_) {
		std::cerr << "Couldn't create IRC session in Server.";
		abort();
	}
	irc_set_ctx(IRC, this);

	assert( config_->network->nickName.length() != 0 );
	std::string host = config_->host;
	if(config_->ssl) {
#if defined(LIBIRC_OPTION_SSL_NO_VERIFY)
		host = "#" + host;
		if(!config_->ssl_verify) {
			std::cerr << "Warning: connecting without SSL certificate verification." << std::endl;
			irc_option_set(IRC, LIBIRC_OPTION_SSL_NO_VERIFY);
		}
#else
		std::cerr << "Error: Your version of libircclient does not support SSL. Failing connection." << std::endl;
		slotDisconnected();
		return;
#endif
	}
	irc_connect(IRC, host.c_str(),
		config_->port,
		config_->network->password.c_str(),
		config_->network->nickName.c_str(),
		config_->network->userName.c_str(),
		config_->network->fullName.c_str());
}
示例#4
0
void Kommunikater::commitServer()
{
    callbacks.event_connect = event_connect;
    callbacks.event_channel = event_channel;

    session = irc_create_session (&callbacks);

    irc_set_ctx (session, &ctx);
	irc_option_set (session, LIBIRC_OPTION_STRIPNICKS);

    irc_connect (session, iam.server, 6667, 0, iam.nick, 0, 0);

    state.session = session;
    if(irc_run (session) && !state.stop)
        printf ("Could not connect or I/O error");
}
示例#5
0
int main (int argc, char **argv)
{
	irc_callbacks_t	callbacks;
	irc_ctx_t ctx;
	irc_session_t * s;

	if ( argc != 4 )
	{
		printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
		return 1;
	}

	memset (&callbacks, 0, sizeof(callbacks));

	callbacks.event_connect = event_connect;
	callbacks.event_join = event_join;
	callbacks.event_channel = event_channel;
	callbacks.event_numeric = event_numeric;

	s = irc_create_session (&callbacks);

	if ( !s )
	{
		printf ("Could not create session\n");
		return 1;
	}

	ctx.channel = argv[3];
    ctx.nick = argv[2];

	irc_set_ctx (s, &ctx);
	
	if ( irc_connect (s, argv[1], 6667, 0, argv[2], 0, 0) )
	{
		printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
		return 1;
	}

	irc_run (s);

	return 1;
}
bool CslIrcThread::Connect(const CslIrcContext& context)
{
    m_section.Enter();

    if (FindContext(context))
        return false;

    CslIrcContext *ctx=new CslIrcContext(context);

    m_contexts.Add(ctx);
    irc_set_ctx(ctx->Session,ctx);

    m_section.Leave();

    if (m_mutex.TryLock()!=wxMUTEX_NO_ERROR)
        return true;
    m_condition->Signal();
    m_mutex.Unlock();

    return true;
}
示例#7
0
std::thread Twitch::Connect( const std::string &user, const std::string &password ) {
	return std::thread( [this, user, password] {
		this->user = user;
		this->channel = "#" + user;

		irc_callbacks_t	callbacks;
		memset( &callbacks, 0, sizeof( callbacks ) );
		callbacks.event_connect = event_connect;
		callbacks.event_channel = event_channel;
		callbacks.event_numeric = event_numeric;

		session = irc_create_session( &callbacks );

		if ( !session ) {
			OnError( -1, "Failed to create IRC session" );
			return;
		}

		TwitchContext *ctx = new TwitchContext();
		ctx->twitch = this;
		irc_set_ctx( session, ctx );

		irc_option_set( session, LIBIRC_OPTION_STRIPNICKS );

		status = TWITCH_CONNECTING;

		if ( irc_connect( session, "irc.chat.twitch.tv", 6667, password.c_str(), user.c_str(), user.c_str(), user.c_str() ) ) {
			OnError( irc_errno( session ), irc_strerror( irc_errno( session ) ) );
			status = TWITCH_DISCONNECTED;
			return;
		}

		if ( irc_run( session ) ) {
			OnError( irc_errno( session ), irc_strerror( irc_errno( session ) ) );
			status = TWITCH_DISCONNECTED;
			return;
		}
	} );
}
示例#8
0
int main (int argc, char **argv)
{
	irc_callbacks_t	callbacks;
	irc_ctx_t ctx;
	irc_session_t * s;
	unsigned short port = 6667;

	if ( argc != 4 )
	{
		printf ("Usage: %s <server> <nick> <channel>\n", argv[0]);
		return 1;
	}

	memset (&callbacks, 0, sizeof(callbacks));

	callbacks.event_connect = event_connect;
	callbacks.event_join = event_join;
	callbacks.event_channel = event_channel;
	callbacks.event_numeric = event_numeric;

	s = irc_create_session (&callbacks);

	if ( !s )
	{
		printf ("Could not create session\n");
		return 1;
	}

	ctx.channel = argv[3];
    ctx.nick = argv[2];

    printf("nick:%s and channel:%s\n",ctx.nick,ctx.channel);

	irc_set_ctx (s, &ctx);
	
	// If the port number is specified in the server string, use the port 0 so it gets parsed
	if ( strchr( argv[1], ':' ) != 0 )
		port = 0;

	// To handle the "SSL certificate verify failed" from command line we allow passing ## in front 
	// of the server name, and in this case tell libircclient not to verify the cert
	if ( argv[1][0] == '#' && argv[1][1] == '#' )
	{
		// Skip the first character as libircclient needs only one # for SSL support, i.e. #irc.freenode.net
		argv[1]++;
		
		irc_option_set( s, LIBIRC_OPTION_SSL_NO_VERIFY );
	}
	
	// Initiate the IRC server connection
	if ( irc_connect (s, argv[1], port, 0, argv[2], 0, 0) )
	{
		printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
		return 1;
	}

	// and run into forever loop, generating events
	if ( irc_run (s) )
	{
		printf ("Could not connect or I/O error: %s\n", irc_strerror (irc_errno(s)));
		return 1;
	}

	return 1;
}
示例#9
0
/*
====================
IRC_CreateSession

Initiates a new IRC session and returns a handle to it.
Call IRC_ConnectSession to connect to an IRC server.
====================
*/
int IRC_CreateSession(void) {
    int handle = -1, i;
    irc_callbacks_t cb;
    irc_session_t *c;
    
    if(!irc_initialized.integer) {
        IRC_Printf("Error: Failed to create session: IRC module is not initialized\n");
        return -1;
    }
    
    if(!irc_enabled.integer) {
        IRC_Printf("Error: Failed to create session: irc_enabled is off\n");
        return -1;
    }
    
    for(i = 0; i < IRC_MAX_SESSIONS; ++i)
        if(!irc_sessions[i].session) {
            handle = i;
            break;
        }
    
    if(handle < 0) {
        IRC_Printf("Error: Failed to create session: Session limit exceeded\n");
        return handle;
    }
    
    c = &irc_sessions[handle];
    
    memset(&cb, 0, sizeof(cb));
    cb.event_numeric = IRC_Callback_Numeric;
    cb.event_connect = IRC_Callback_Default;
    cb.event_nick = IRC_Callback_Default;
    cb.event_quit = IRC_Callback_Default;
    cb.event_join = IRC_Callback_Default;
    cb.event_part = IRC_Callback_Default;
    cb.event_mode = IRC_Callback_Default;
    cb.event_umode = IRC_Callback_Default;
    cb.event_topic = IRC_Callback_Default;
    cb.event_kick = IRC_Callback_Default;
    cb.event_channel = IRC_Callback_Default;
    cb.event_privmsg = IRC_Callback_Default;
    cb.event_notice = IRC_Callback_Default;
    cb.event_channel_notice = IRC_Callback_Default;
    cb.event_invite = IRC_Callback_Default;
    cb.event_ctcp_req = IRC_Callback_Default;
    cb.event_ctcp_rep = IRC_Callback_Default;
    cb.event_ctcp_action = IRC_Callback_Default;
    cb.event_unknown = IRC_Callback_Default;
    
    c->session = irc_create_session(&cb);
    
    if(!c->session) {
        IRC_Printf("Failed to create an IRC session: %s\n", irc_strerror(irc_errno(c->session)));
        return -1;
    }
    
    // irc_option_set(c->session, LIBIRC_OPTION_DEBUG);
    irc_set_ctx(c->session, (void*)c);
    
    IRC_Printf("Created an IRC session with handle %i\n", handle);
    
    return handle;
}
示例#10
0
文件: main.c 项目: Sokrad/ircbot
int main(int argc, char** argv)
{
	irc_callbacks_t callbacks;
	irc_session_t *s;
	
	//Time init
	
	time ( &rawtime );
	ptm = gmtime ( &rawtime );


	printf(" : - Bot wird gestartet...\n");

	//-- SQLite Init

	printf(" : - SQLite wird initialisiert...\n");

	sqlite3_open(SQLITEFILE, &sqlitedb);
	sql_createtables();
	
	

	switch(argc)
	{
		case 2:
		{
			int tmp = -1;
			tmp = configfileLaden(argv[1]);

			if(tmp==0)
			{
				return 1;
			}
			printf(" : - Bot Configfile geladen \n");
		}break;


		case 4:
			ctx.channel 	= argv[3];
			ctx.nick 	= argv[2];
			server		= argv[1];
		
			printf(" : - Bot configuriert (Parameter) \n");

			break;
		default:
			printf ("!: - Parameter fehlen\n");
			printf ("!: - %s <server> <nick> '<#channel>' \n",argv[0]);
			printf ("!: - %s <configfile> \n",argv[0]);

			return 1;

	}
	
	printf(" : -   Server: %s \n",server);
	printf(" : -   Nick: %s \n",ctx.nick);
	printf(" : -   Channel: %s \n",ctx.channel);

	memset(&callbacks, 0, sizeof(callbacks));
	
	//-- Events --
	callbacks.event_connect = event_connect;
	callbacks.event_join = event_join;
	callbacks.event_channel = event_channel;
	callbacks.event_privmsg = event_privmsg;
	//--

	
	//	ctx.channel = "#Bot";
	//	ctx.nick = "FH-BoT";
	
	if(server == NULL)
	{
		printf("?: - setzt Standartserver\n");
		server = "localhost";
	}

	s = irc_create_session(&callbacks);
	
	if(!s)
	{
		printf("X: - Konnte keine IRC Session aufbauen...\n");
		return 1;
	}

	irc_set_ctx (s,&ctx);
	irc_option_set (s, LIBIRC_OPTION_STRIPNICKS);

	if( irc_connect (s, server,port, 0,ctx.nick,0,0))
	{
		printf("X: - Konnte keine Verbindung zum Server aufbauen...\n");
		return 1;
	}	
	
	if( irc_run (s) )
	{
		printf (" : - SQLite wird geschlossen. \n");
		sqlite3_close(sqlitedb);
		printf (" : - Bot wurde beendet. \n");
		return 1;
	}

	sqlite3_close(sqlitedb);
	return 1;
}
示例#11
0
/**
* @brief Main Funktion
* Setzt die Callback Funktionen.
* Initialisiert und Startet den IRC Bot
* @param argc ein Integer, Anzahl der Argumente
* @param argv ein Char, beinhaltet Argumente
* @return int
*/
int main (int argc, char **argv)
{
	irc_callbacks_t	callbacks;
	irc_ctx_t ctx;
	irc_session_t * s;
	unsigned short port;

	if ( argc != 5 )
	{
		printf ("Usage: %s <server> <nick> <'#channel'> <daemon:yes/no>\n", argv[0]);
		return 1;
	}
	
	if ( !strcmp (argv[4], "yes") )
	{
		daemonize();
	}
	else if ( !( !strcmp (argv[4], "no") ))
	{
		printf ("Usage: %s <server> <nick> <'#channel'> <daemon:yes/no>\n", argv[0]);
		return 1;
		//Beispiel
		// ./irc_bot irc.twice-irc.de:6667 test_bot328 '#qaywsx999' no
	}

	memset (&callbacks, 0, sizeof(callbacks));
	
	callbacks.event_connect = event_connect;
	callbacks.event_join = event_join;
	callbacks.event_nick = event_nick_change;
	callbacks.event_quit = event_quit;
	callbacks.event_channel = event_channel;
	callbacks.event_privmsg = event_privmsg;

	s = irc_create_session (&callbacks);

	if ( !s )
	{
		printf ("Could not create session\n");
		return 1;
	}

	ctx.channel = argv[3];
    ctx.nick = argv[2];
    bot_name = ctx.nick;

	irc_set_ctx (s, &ctx);
	
	createSQLDB();

	// If the port number is specified in the server string, use the port 0 so it gets parsed
	if ( strchr( argv[1], ':' ) != 0 )
		port = 0;

	// To handle the "SSL certificate verify failed" from command line we allow passing ## in front 
	// of the server name, and in this case tell libircclient not to verify the cert
	if ( argv[1][0] == '#' && argv[1][1] == '#' )
	{
		// Skip the first character as libircclient needs only one # for SSL support, i.e. #irc.freenode.net
		argv[1]++;
		
		irc_option_set( s, LIBIRC_OPTION_SSL_NO_VERIFY );
	}
	
	// Initiate the IRC server connection
	if ( irc_connect (s, argv[1], port, 0, argv[2], 0, 0) )
	{
		printf ("Could not connect: %s\n", irc_strerror (irc_errno(s)));
		return 1;
	}

	// and run into forever loop, generating events
	if ( irc_run (s) )
	{
		printf ("Could not connect or I/O error: %s\n", irc_strerror (irc_errno(s)));
		return 1;
	}

	return 1;
}
void ChatNetworkingIRC::createConnection( const ChatConnectionConfig& conf ) throw ( ChatExpection )
{
    if ( conf._port == 0 )
    {
        throw ChatExpection( "Invalid Port" );
    }
    if ( !conf._serverURL.length() )
    {
        throw ChatExpection( "Invalid Server URL" );
    }
    if ( !conf._channel.length() )
    {
        throw ChatExpection( "Invalid Channel" );
    }

#ifdef WIN32
    // start up winsock
    WORD    version;
    WSADATA data;
    int     err;
    version = MAKEWORD( 2, 2 );
    err = WSAStartup( version, &data );
    if ( err != 0 ) 
    {
        throw ChatExpection( "Cannot setup ms winsock" );
    }
#endif

    irc_callbacks_t callbacks;
    memset( &callbacks, 0, sizeof( callbacks ) );
    // set up the callbacks
    callbacks.event_connect = event_connect;
    callbacks.event_nick    = event_nick;
    callbacks.event_join    = event_join;
    callbacks.event_numeric = event_numeric;
    callbacks.event_channel = event_channel;
    callbacks.event_kick    = event_kick;
    callbacks.event_part    = event_part;

    irc_session_t* p_session = NULL;

    p_session = irc_create_session( &callbacks );
    if ( !p_session )
    {
        throw ChatExpection( "Could not create networking session" );
    }

    // store the context information
    IRCSessionContext* p_ctx = new IRCSessionContext;
    p_ctx->_p_handler = this;
    p_ctx->_channel      = conf._channel;
    irc_set_ctx( p_session, p_ctx );
    _p_session = p_session;

    irc_option_set( p_session, LIBIRC_OPTION_STRIPNICKS );

    // initiate the IRC server connection
    if ( irc_connect( 
        p_session, 
        conf._serverURL.c_str(), 
        conf._port, 
        conf._password.length() ? conf._password.c_str() : NULL, 
        conf._nickname.c_str(), 
        conf._username.length() ? conf._username.c_str() : NULL, 
        conf._realname.length() ? conf._realname.c_str() : NULL ) )
    {
        throw ChatExpection( std::string( irc_strerror( irc_errno( p_session ) ) ) );
    }

    // store the configuration
    _p_config  = new ChatConnectionConfig;
    *_p_config = conf;
    _p_config->_p_protocolHandler = this;

    // start the thread -- the method run() below is called in a new created thread
    start();
}
示例#13
0
////////////////////////////////////////////////////////////////////////////////
// update
eSysStateReturn GaMatchmakingState::main()
{
	BcScopedLock< BcMutex > Lock( Lock_ );
	BcReal Delta = SysKernel::pImpl()->getFrameTime();

	switch( HandshakeState_ )
	{
	case HSS_STUN:
		{
			// Only do once.
			if( MappedHandshakeAddr_ == 0 )
			{
				if( doSTUN() )
				{
					SysID_ = static_cast< BcU32 >( BcHash( (BcU8*)&MappedHandshakeAddr_, sizeof( MappedHandshakeAddr_ ) ) ); // Hash the mapped address to we don't broadcast it.
					if( MappedHandshakeAddr_ != 0 )
					{
						HandshakeState_ = HSS_IDLE;
					}
				}
				else
				{
					HandshakeState_ = HSS_STUN;
				}
			}
			else
			{
				HandshakeState_ = HSS_IDLE;
			}
		}
		break;
	case HSS_IDLE:
		{
			ConnectTimer_ -= Delta;

			if( ConnectTimer_ < 0.0f )
			{
				if( pSession_ == NULL )
				{
					pSession_ = irc_create_session( &Callbacks_ );
				}

				if( pSession_ != NULL && !irc_is_connected( pSession_ ) )
				{
					irc_set_ctx( pSession_, this );

					std::string Channel = "#testchannel";
					BcFile File;
					if( File.open( "config.json" ) )
					{
						char* pData = new char[ File.size() ];
						File.read( pData, File.size() );
						Json::Reader Reader;
		
						Json::Value Root;
						if( Reader.parse( pData, pData + File.size(), Root ) )
						{
							Channel = Root["channel"].asCString();
						}
						delete [] pData;
					}

					BcSPrintf( ScreenName_, "%s_%x", "PSY", BcRandom::Global.rand() );
					BcSPrintf( Channel_, Channel.c_str() );

					// Connect to the server.
					int RetVal = irc_connect( pSession_, "www.neilo.gd", 8000, NULL, ScreenName_, ScreenName_, ScreenName_ );

					if( RetVal == 0 )
					{
						// Start the thread to tick the client.
						BcThread::start( "EvtBridgeIRC" );

						ClientID_ = BcErrorCode;
						RemoteHandshakeAddr_ = 0;
						RemoteHandshakePort_ = 0;
						//LocalHandshakeAddr_ = 0;
						//LocalHandshakePort_ = 0;
						//MappedHandshakeAddr_ = 0;
						//MappedHandshakePort_ = 0;
						HandshakeState_ = HSS_WAIT_INVITE;
					}
					else
					{
						BcThread::join();

						irc_destroy_session( pSession_ );
						pSession_ = NULL;
					}
				}
			}
		}
		break;

	case HSS_WAIT_INVITE:
		{
			InviteTimer_ -= Delta;

			if( InviteTimer_ < 0.0f )
			{
				InviteTimer_ = BcAbs( BcRandom::Global.randReal() ) * 5.0f + 5.0f;

				// Send play with me message to channel.

				BcChar PlayBuffer[256];
				BcSPrintf( PlayBuffer, "REQ:%u", SysID_ );
				irc_cmd_msg( pSession_, Channel_, PlayBuffer );
			}
		}
		break;

	case HSS_WAIT_ADDR:
		{
			HandshakeTimer_ -= Delta;

			if( HandshakeTimer_ < 0.0f )
			{
				HandshakeState_ = HSS_WAIT_INVITE;
			}
		}
		break;

	case HSS_COMPLETE:
		{
			BcPrintf("GaMatchmakingState: Complete! ClientID of ours is %u\n", ClientID_);
			return sysSR_FINISHED;
		}
		break;
	}

	if( HandshakeState_ != HSS_STUN )
	{
		if( HandshakeState_ != HSS_IDLE && ( pSession_ == NULL || !irc_is_connected( pSession_ ) ) )
		{
			BcSleep( 0.1f );
			BcThread::join();
			BcSleep( 0.1f );
			if( pSession_ != NULL )
			{
				irc_destroy_session( pSession_ );
				pSession_ = NULL;
			}
			HandshakeState_ = HSS_IDLE;
			ConnectTimer_ = 10.0f;
		}
	}

	return sysSR_CONTINUE;
}
示例#14
0
文件: ircbot.c 项目: fkhadivi/Faraz
int main (int argc, char **argv)
{
    bool daemon_deaktiv = false;
    bool btipp = false;

    int is=1, in=2, ic=3;
    int i=1;

    for(; i < argc; i++)
    {
        if ( !strncmp(argv[i], "-d",3) || !strncmp(argv[i], "-D",3) )
        {
            if(argc > 4)
                btipp = true;
            daemon_deaktiv = true;
            printf("\n--------------------------------------------------\n");
            printf("Daemon wird deaktiviert.");
            if(i<2)
            {
                is = 2;
                in = 3;
                ic = 4;
            }

        }
        else if ( !strncmp(argv[i], "-h",3) || !strncmp(argv[i], "-help",6) )
        {
            btipp = true;
            printf("TEST: HELP ist da\n");
            system("nroff -mandoc ./man/iman.pod | less");
        }

    }
    if(btipp == false && argc != 4 )
    {
        printf("\nUsage: %s [options]\n", argv[0]);
        printf("\n          [ -h | -help ]                   Anleitung");
        printf("\n          [ <server> <nick> <#channel> ]   Ircbot startet");
        printf("\n          [ -d .......... ] startet und Daemon wird deaktiviert\n\n");
        exit(EXIT_SUCCESS);
    }


    irc_callbacks_t	callbacks;
    irc_ctx_t ctx;
    irc_session_t * s;

    memset (&callbacks, 0, sizeof(callbacks));

    callbacks.event_connect = event_connect;
    callbacks.event_join = event_join;
    callbacks.event_channel = event_channel;
    callbacks.event_quit = event_quit;

    s = irc_create_session (&callbacks);

    if ( !s )
    {
        printf ("Could not create session\n");
        return 1;
    }

    ctx.channel = argv[ic];
    ichanel = argv[ic];
    ctx.nick = argv[in];
    mynick = argv[in];

    irc_set_ctx (s, &ctx);
    irc_option_set(s, LIBIRC_OPTION_STRIPNICKS);

    if ( irc_connect (s, argv[is], 6667, 0, argv[in], 0, 0) )
    {
        printf ("Es kann nicht verbinden: %s\n", irc_strerror (irc_errno(s)));
        return 1;
    }
    else
    {
        if(daemon_deaktiv == false)
        {
            printf("\n--------------------------------------------------\n");
            printf("Daemon wird aktiviert.");
        }

        printf("\nBot-Nickname: '%s'",argv[in]);
        printf("\nChannel     : '%s'",argv[ic]);
        printf("\nEs verbindet: '%s'....\n", argv[is]);
    }
    if(daemon_deaktiv == false)
    {
        openlog (daemon_name, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DAEMON);
        syslog (LOG_INFO, "Ircbot: Starting....");
        start_daemon(daemon_name, LOG_USER);
    }
    irc_run (s);

    syslog (LOG_INFO, "Ircbot: Terminating...");
    closelog();

    return 1;
}