From: Andrey C. <sku...@us...> - 2006-06-16 15:22:30
|
Update of /cvsroot/eas-dev/eas/libeas In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv2049/libeas Modified Files: execmanager.prg messagemanager.prg protocol_raw.prg session.prg uimanager.prg Log Message: Fix another connection. Concurrent connections are still broken. Index: execmanager.prg =================================================================== RCS file: /cvsroot/eas-dev/eas/libeas/execmanager.prg,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- execmanager.prg 2 Jun 2006 14:32:45 -0000 1.1 +++ execmanager.prg 16 Jun 2006 15:22:20 -0000 1.2 @@ -23,6 +23,8 @@ obj:cManager := EASComponentManager( params ) _recover_EASEXECUTEMANAGER(obj) + + setCommand(, 'sys.manager', 'commands', {|p| obj:getCommands(p) } ) return obj @@ -37,9 +39,9 @@ /** Open manager */ static function c_open( self, params ) - eDebug(15, "Execute layer: open") + eDebug(15, "Execute layer: start component manager") self:cManager:open( params ) - eDebug(15, "Execute layer: opened") + eDebug(15, "Execute layer: component manager is ready") return NIL /** Close manager */ @@ -77,7 +79,7 @@ return NIL endif elseif .not. empty (id:=self:cManager:lookup( params )) - eDebug(15, "EXEC COMPONENT COMMAND: ",params:receiver,params:command,"...") + eDebug(15, "EXEC COMPONENT COMMAND:",params:receiver,params:command,"...") params:__id := id vRet := self:cManager:execute( params ) eDebug(20, "EXEC COMPONENT '"+params:command+"' returns:", vRet) @@ -149,11 +151,13 @@ // params: event:C, action:B or component:C, command:C, action:B local i + //?? "setCommand:", params, chr(10) + if 'COMMAND' $ params if assertParameters( params, { 'component:C', 'command:C', 'action:B' } ) return NIL endif - + // Single command i := ascan( self:events, {|e| e[1]==params:component .and. e[2]==params:command} ) if i > 0 @@ -176,20 +180,29 @@ endif return NIL -/** Disconnect code from signal */ +/** Disconnect code from signal or command */ static function c_disconnect( self, params ) // params: event:C - local i + local i + //local aa, j - // Check params - if assertParameters( params, { 'event:C' } ) - return NIL - endif - - i := ascan( self:events, {|e| e[1]==params:event } ) - if i > 0 - adel(self:events, i) - asize(self:events, len(self:events)-1 ) + if "EVENT" $ params .and. valtype(params:event) == 'C' + i := ascan( self:events, {|e| e[1]==params:event } ) + if i > 0 + adel(self:events, i) + asize(self:events, len(self:events)-1 ) + endif + elseif "COMPONENT" $ params .and. valtype(params:component) == 'C' + i := ascan( self:commands, {|e| e[1]==params:component .and. e[2]==params:command } ) +/* eDebug(11, "Remove command:", params:component+'.'+params:command,iif(i>0,'OK','FAILED') ) + aa := self:getCommands() + for j in self:commands + ?? chr(9),j[1],chr(9),j[2],chr(10) + next +*/ if i > 0 + adel(self:commands, i) + asize(self:commands, len(self:commands)-1 ) + endif endif return NIL Index: messagemanager.prg =================================================================== RCS file: /cvsroot/eas-dev/eas/libeas/messagemanager.prg,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- messagemanager.prg 2 Jun 2006 14:32:45 -0000 1.1 +++ messagemanager.prg 16 Jun 2006 15:22:20 -0000 1.2 @@ -18,6 +18,7 @@ /** TODO: - isolated MM interaction by gate mechanism + - unsetCommand() for terminated connections */ function EASMessageManager( params ) @@ -46,8 +47,6 @@ obj:transport := EASTransportManager(tparams) endif - setCommand(, 'sys.manager', 'commands', {|p| obj:exec:getCommands(p) } ) - return obj function _recover_EASMESSAGEMANAGER(obj) @@ -168,6 +167,19 @@ endif return NIL +/** Delete command for specified component */ +function removeCommand( msg_m, component, command ) + local params:=map() + msg_m := iif(valtype(msg_m) != 'O', global_msg, msg_m) + + eDebug(11, "removeCommand():", component, command) + if valtype(msg_m) == 'O' .and. valtype(msg_m:exec) == 'O' + params:component := component + params:command := command + return msg_m:exec:disconnect( params ) + endif +return NIL + /** Send message */ function sendMessage( msg_m, receiver, command, args, sender ) local params:=map(), ret Index: protocol_raw.prg =================================================================== RCS file: /cvsroot/eas-dev/eas/libeas/protocol_raw.prg,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- protocol_raw.prg 6 Jun 2006 13:29:30 -0000 1.2 +++ protocol_raw.prg 16 Jun 2006 15:22:20 -0000 1.3 @@ -108,7 +108,7 @@ endif eDebug(10, "NETWORK: Accept connections...") /*===================================================================*/ - /* Main server loop */ + /* Main server loop */ /*===================================================================*/ do while( .T. ) if (session := tcpAccept( self:socket:handle, self:socket:aTimeOut )) != -1 @@ -146,7 +146,7 @@ return .T. /* Thread function for session open */ -static function session_open(session) +static function session_open( session ) // Set global variables set deleted on set translate path off Index: session.prg =================================================================== RCS file: /cvsroot/eas-dev/eas/libeas/session.prg,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- session.prg 2 Jun 2006 14:32:45 -0000 1.1 +++ session.prg 16 Jun 2006 15:22:20 -0000 1.2 @@ -63,14 +63,17 @@ static function c_login( self, params ) local oWrite := map() - eDebug( 5, "LOGIN:", params) + eDebug( 5, "SECURITY: LOGIN:", params) self:access := .F. // Authenticate user - if empty( lcomponent('auth', 'authenticate', 'params', params ) ) - self:access := .T. + self:access := lcomponent('auth', 'authenticate', 'params', params ) + if valtype(self:access) == 'U' + self:access := .T. // Access granted if auth component is absent + elseif valtype(self:access) != 'L' + self:access := .F. // Access denied on any auth component internal error endif - eDebug(10, "Access: ",self:access ) + eDebug(10, "SECURITY: access: ",self:access ) oWrite:answer := self:access eDebug(16, "Answer:", oWrite:answer) @@ -78,6 +81,10 @@ /** Close session */ static function c_close( self, params ) + removeCommand(, 'sys.transport.'+self:name, 'login' ) + removeCommand(, 'sys.transport.default', 'login' ) + removeCommand(, 'sys.transport.'+self:name, 'close' ) + removeCommand(, 'sys.transport.default', 'close' ) self:connection:closeSession( self ) eDebug(15, "Session closing.") return NIL @@ -111,6 +118,7 @@ // Check for session.close if lower(obj:receiver) == 'session' .and. lower(obj:command) == 'close' + //?? "SESSION CLOSE: session.close signal message&\n" return 2 // Close session endif @@ -122,8 +130,9 @@ self:write( oWrite ) // If access denied then close connection - //eDebug(2, "ACCESS:",self:access) + eDebug(2, "ACCESS:",self:access) if .not. self:access + //?? "SESSION CLOSE: access denied.&\n" return 2 // Close session endif Index: uimanager.prg =================================================================== RCS file: /cvsroot/eas-dev/eas/libeas/uimanager.prg,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- uimanager.prg 2 Jun 2006 14:32:45 -0000 1.1 +++ uimanager.prg 16 Jun 2006 15:22:20 -0000 1.2 @@ -33,7 +33,6 @@ // Init workspace c_init(obj, params) - return obj function _recover_EASUIMANAGER(obj) @@ -65,7 +64,7 @@ return NIL /** Open manager */ -static function c_open( self, params ) // TODO +static function c_open( self, params ) setCommand(, 'sys.ui', 'openForm', {|p| self:openForm(p) } ) setCommand(, 'sys.ui', 'saveForm', {|p| self:saveForm(p) } ) setCommand(, 'sys.ui', 'saveFormAndClose', {|p| self:saveFormAndClose(p) } ) |