diff --git a/callagent/MGCPCallAgent.st b/callagent/MGCPCallAgent.st index d22cc39..dd1edb4 100644 --- a/callagent/MGCPCallAgent.st +++ b/callagent/MGCPCallAgent.st @@ -16,10 +16,12 @@ along with this program. If not, see . " -PackageLoader fileInPackage: 'Sockets'. +PackageLoader + fileInPackage: 'Sockets'; + fileInPackage: 'OsmoNetwork'. Object subclass: MGCPCallAgentBase [ - | socket queue rx tx trunks sem addr port net_exit | + | net trunks sem addr port | @@ -40,11 +42,14 @@ Object subclass: MGCPCallAgentBase [ initialize: anAddress port: aPort [ sem := Semaphore forMutualExclusion. - queue := SharedQueue new. trunks := OrderedCollection new. addr := anAddress. port := aPort. - net_exit := Semaphore new. + + net := Osmo.OsmoUDPSocket new + name: 'MGCPCallAgent'; + onData: [:data | OsmoDispatcher dispatchBlock: [self handleData: data]]; + yourself. ] addTrunk: aTrunk [ @@ -60,6 +65,7 @@ Object subclass: MGCPCallAgentBase [ ] start [ + | socket | self stop. @@ -67,61 +73,17 @@ Object subclass: MGCPCallAgentBase [ bufferSize: 2048; yourself. - "Receive datagrams from the socket..." - rx := [ - [Processor activeProcess name: 'MGCP RX'. - self runRXProcess] ensure: [net_exit signal]] fork. - - "Send data to the MGWs" - tx := [ - [Processor activeProcess name: 'MGCP TX'. - self runTXProcess] ensure: [net_exit signal]] fork. - ] - - runRXProcess [ - - - [ | data | - socket ensureReadable. - socket isOpen ifFalse: [ - ^self logNotice: 'MGCPCallAgent socket closed.' area: #mgcp]. - OsmoDispatcher dispatchBlock: [self handleData: data]. - ] repeat. - ] - - runTXProcess [ - - - [ | data | - data := queue next. - data = nil ifTrue: [ - ^self logNotice: 'MGCPCallAgent TX asked to quit.' area: #mgcp]. - - socket nextPut: data. - ] repeat. + net start: socket. ] stop [ - socket ifNil: [^self]. - - "Close" - socket close. - queue nextPut: nil. - - "Wait for the process to exit" - self logNotice: 'MGCPCallAgent waiting for IO handlers to exit.' area: #mgcp. - net_exit - wait; - wait. - - "Forget things" - socket := nil. - tx := nil. - rx := nil. + + net stop ] queueData: aDatagram [ - queue nextPut: aDatagram. + + net queueData: aDatagram. ] ]