2011-01-25 17:53 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbnetio/utils/netiosrv/netiosrv.prg
* contrib/hbnetio/utils/netiosrv/netiocmd.prg
+ Added command to stop specific or every connection.
Using 'stop <ip:port>' or 'stop all'.
This commit is contained in:
@@ -16,6 +16,12 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2011-01-25 17:53 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbnetio/utils/netiosrv/netiosrv.prg
|
||||
* contrib/hbnetio/utils/netiosrv/netiocmd.prg
|
||||
+ Added command to stop specific or every connection.
|
||||
Using 'stop <ip:port>' or 'stop all'.
|
||||
|
||||
2011-01-25 16:54 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/src/vm/itemapi.c
|
||||
* do not clear parameter when NULL item is passed to
|
||||
|
||||
@@ -15,13 +15,14 @@
|
||||
|
||||
FUNCTION hbnetiosrv_LoadCmds( bQuit, bShowInfo )
|
||||
LOCAL hCmds := { ;
|
||||
"?" => { "Synonym for 'help'." , {|| cmdHelp( hCmds ) } },;
|
||||
"clear" => { "Clear screen." , {|| Scroll(), SetPos( 0, 0 ) } },;
|
||||
"config" => { "Show server configuration." , bShowInfo },;
|
||||
"sysinfo" => { "Show system/build information.", {|| cmdSysInfo() } },;
|
||||
"conn" => { "Show connection information." , {| cCommand, netiosrv | HB_SYMBOL_UNUSED( cCommand ), cmdConnInfo( netiosrv ) } },;
|
||||
"quit" => { "Stop server and exit." , bQuit },;
|
||||
"help" => { "Display this help." , {|| cmdHelp( hCmds ) } };
|
||||
"?" => { "" , "Synonym for 'help'." , {|| cmdHelp( hCmds ) } },;
|
||||
"clear" => { "" , "Clear screen." , {|| Scroll(), SetPos( 0, 0 ) } },;
|
||||
"config" => { "" , "Show server configuration." , bShowInfo },;
|
||||
"sysinfo" => { "" , "Show system/build information.", {|| cmdSysInfo() } },;
|
||||
"conn" => { "" , "Show connection information." , {| cCommand, netiosrv | HB_SYMBOL_UNUSED( cCommand ), cmdConnInfo( netiosrv ) } },;
|
||||
"stop" => { "[<ip:port>|all]", "Stop specified connection(s)." , {| cCommand, netiosrv | cmdConnStop( cCommand, netiosrv ) } },;
|
||||
"quit" => { "" , "Stop server and exit." , bQuit },;
|
||||
"help" => { "" , "Display this help." , {|| cmdHelp( hCmds ) } };
|
||||
}
|
||||
|
||||
RETURN hCmds
|
||||
@@ -44,13 +45,13 @@ STATIC PROCEDURE cmdHelp( hCommands )
|
||||
LOCAL n, c, m
|
||||
|
||||
m := 0
|
||||
hb_HEval( hCommands, {| k | m := Max( m, Len( k ) ) } )
|
||||
hb_HEval( hCommands, {| k, l | m := Max( m, Len( k + iif( Empty( l[ 1 ] ), "", " " + l[ 1 ] ) ) ) } )
|
||||
|
||||
AAdd( aTexts, "Commands:" )
|
||||
|
||||
/* Processing commands */
|
||||
FOR EACH n IN hCommands
|
||||
AAdd( aTexts, " " + PadR( n:__enumKey(), m ) + " - " + n[ 1 ] )
|
||||
AAdd( aTexts, " " + PadR( n:__enumKey() + iif( Empty( n[ 1 ] ), "", " " + n[ 1 ] ), m ) + " - " + n[ 2 ] )
|
||||
NEXT
|
||||
|
||||
ASort( aTexts, 2 )
|
||||
|
||||
@@ -64,6 +64,7 @@ PROCEDURE Main( ... )
|
||||
LOCAL netiosrv[ _NETIOSRV_MAX_ ]
|
||||
|
||||
LOCAL cParam
|
||||
LOCAL aCommand
|
||||
LOCAL cCommand
|
||||
LOCAL cPassword
|
||||
|
||||
@@ -78,7 +79,6 @@ PROCEDURE Main( ... )
|
||||
LOCAL hCommands
|
||||
LOCAL nSavedRow
|
||||
LOCAL nPos
|
||||
LOCAL aCmd
|
||||
|
||||
LOCAL cExt
|
||||
LOCAL cFile
|
||||
@@ -98,6 +98,8 @@ PROCEDURE Main( ... )
|
||||
netiosrv[ _NETIOSRV_hConnection ] := { => }
|
||||
netiosrv[ _NETIOSRV_mtxConnection ] := hb_mutexCreate()
|
||||
|
||||
hb_HKeepOrder( netiosrv[ _NETIOSRV_hConnection ], .T. )
|
||||
|
||||
FOR EACH cParam IN { ... }
|
||||
DO CASE
|
||||
CASE Lower( Left( cParam, 6 ) ) == "-port="
|
||||
@@ -238,10 +240,9 @@ PROCEDURE Main( ... )
|
||||
ENDIF
|
||||
nHistIndex := Len( aHistory ) + 1
|
||||
|
||||
nPos := iif( Empty( cCommand ), 0, hb_HPos( hCommands, Lower( cCommand ) ) )
|
||||
IF nPos > 0
|
||||
aCmd := hb_HValueAt( hCommands, nPos )
|
||||
Eval( aCmd[ 2 ], cCommand, netiosrv )
|
||||
aCommand := hb_ATokens( cCommand, " " )
|
||||
IF ! Empty( aCommand ) .AND. ( nPos := hb_HPos( hCommands, Lower( aCommand[ 1 ] ) ) ) > 0
|
||||
Eval( hb_HValueAt( hCommands, nPos )[ 3 ], cCommand, netiosrv )
|
||||
ELSE
|
||||
QQOut( "Error: Unknown command '" + cCommand + "'.", hb_eol() )
|
||||
ENDIF
|
||||
@@ -296,6 +297,37 @@ STATIC PROCEDURE netiosrv_conn_unregister( netiosrv, pConnectionSocket )
|
||||
|
||||
RETURN
|
||||
|
||||
PROCEDURE cmdConnStop( cCommand, netiosrv )
|
||||
LOCAL aToken := hb_ATokens( cCommand, " " )
|
||||
|
||||
LOCAL aAddressPeer
|
||||
LOCAL cIPPort
|
||||
LOCAL nconn
|
||||
|
||||
IF Len( aToken ) > 1
|
||||
|
||||
cIPPort := Lower( aToken[ 2 ] )
|
||||
|
||||
hb_mutexLock( netiosrv[ _NETIOSRV_mtxConnection ] )
|
||||
|
||||
FOR EACH nconn IN netiosrv[ _NETIOSRV_hConnection ]
|
||||
|
||||
aAddressPeer := NIL
|
||||
netio_srvStatus( nconn[ _NETIOSRV_CONN_pConnection ], NETIO_SRVINFO_PEERADDRESS, @aAddressPeer )
|
||||
|
||||
IF cIPPort == "all" .OR. cIPPort == AddrToIPPort( aAddressPeer )
|
||||
QQOut( "Stopping connection on " + AddrToIPPort( aAddressPeer ), hb_eol() )
|
||||
netio_serverStop( nconn[ _NETIOSRV_CONN_pConnection ], .T. )
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
hb_mutexUnlock( netiosrv[ _NETIOSRV_mtxConnection ] )
|
||||
ELSE
|
||||
QQOut( "Error: Invalid syntax.", hb_eol() )
|
||||
ENDIF
|
||||
|
||||
RETURN
|
||||
|
||||
PROCEDURE cmdConnInfo( netiosrv )
|
||||
LOCAL nconn
|
||||
|
||||
@@ -323,7 +355,7 @@ PROCEDURE cmdConnInfo( netiosrv )
|
||||
netio_srvStatus( nconn[ _NETIOSRV_CONN_pConnection ], NETIO_SRVINFO_PEERADDRESS , @aAddressPeer )
|
||||
|
||||
QQOut( "#" + hb_ntos( nconn:__enumIndex() ) + " " +;
|
||||
hb_TToC( nconn[ _NETIOSRV_CONN_tStart ] ) + " " +;
|
||||
hb_TToC( nconn[ _NETIOSRV_CONN_tStart ], "YYYY.MM.DD", "HH:MM:SS" ) + " " +;
|
||||
PadR( ConnStatusStr( nStatus ), 12 ) + " " +;
|
||||
"fcnt: " + Str( nFilesCount ) + " " +;
|
||||
"send: " + Str( nBytesSent ) + " " +;
|
||||
|
||||
Reference in New Issue
Block a user