From 0a89cfb57bccd2c3fcaeb2bdc3c12569f40ddd6f Mon Sep 17 00:00:00 2001 From: imaginos Date: Thu, 26 May 2005 02:13:19 +0000 Subject: [PATCH] gave access to SetTimeout git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@359 726aef4b-f618-498e-8847-2d620e286838 --- modules/g_modperl.cpp | 29 ++++++++++++++++++++++++++++- modules/modperl.pm | 8 ++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/modules/g_modperl.cpp b/modules/g_modperl.cpp index 84d44736..82655850 100644 --- a/modules/g_modperl.cpp +++ b/modules/g_modperl.cpp @@ -746,7 +746,6 @@ XS(XS_ZNC_CloseSock) { if ( g_ModPerl ) { - PString sReturn = false; int iSockFD = SvIV(ST(0)); CPerlSock *pSock = (CPerlSock *)MANAGER->FindSockByFD( iSockFD ); if ( ( pSock ) && ( pSock->GetSockName() == ZNCSOCK ) ) @@ -756,6 +755,33 @@ XS(XS_ZNC_CloseSock) } } +XS(XS_ZNC_SetSockValue) +{ + dXSARGS; + if ( items < 3 ) + Perl_croak( aTHX_ "Usage: ZNC::SetSockValue( sockhandle, what, value )" ); + + SP -= items; + ax = (SP - PL_stack_base) + 1 ; + { + if ( g_ModPerl ) + { + int iSockFD = SvIV(ST(0)); + PString sWhat = (char *)SvPV(ST(1),PL_na); + CPerlSock *pSock = (CPerlSock *)MANAGER->FindSockByFD( iSockFD ); + if ( ( pSock ) && ( pSock->GetSockName() == ZNCSOCK ) ) + { + if ( sWhat == "timeout" ) + { + u_int iTimeout = SvUV(ST(2)); + pSock->SetTimeout( iTimeout ); + } + } + } + PUTBACK; + } +} + XS(XS_ZNC_COREConnect) { dXSARGS; @@ -977,6 +1003,7 @@ bool CModPerl::OnLoad( const CString & sArgs ) newXS( "ZNC::UnloadMod", XS_ZNC_UnloadMod, (char *)file ); newXS( "ZNC::WriteSock", XS_ZNC_WriteSock, (char *)file ); newXS( "ZNC::CloseSock", XS_ZNC_CloseSock, (char *)file ); + newXS( "ZNC::SetSockValue", XS_ZNC_SetSockValue, (char *)file ); // this sets up the eval CB that we call from here on out. this way we can grab the error produced SetupZNCScript(); diff --git a/modules/modperl.pm b/modules/modperl.pm index d9b5e4fc..26a5bb39 100644 --- a/modules/modperl.pm +++ b/modules/modperl.pm @@ -53,7 +53,6 @@ sub CORELoadMod { $Module = $1; } - if ( !$Module ) { ZNC::PutModule( "Invalid Module requested!" ); @@ -106,7 +105,6 @@ sub CORELoadMod require $FileName; my $NewMod = $Username . $Module; - my $obj = new $NewMod(); if ( !$obj ) { @@ -415,6 +413,12 @@ sub Close ZNC::CloseSock( $me->{fd} ); } +sub SetTimeout +{ + my ( $me, $timeout ) = @_; + ZNC::SetSockValue( $me->{fd}, "timeout", $timeout ); +} + sub Listen { my ( $me, $port, $bindhost, $bEnableReadline, $bUseSSL ) = @_;