callagent: Add some transaction code...
This commit is contained in:
parent
75722e9f84
commit
df11de6c31
|
@ -123,12 +123,12 @@ SIPTransport subclass: SIPUdpTransport [
|
|||
]
|
||||
]
|
||||
|
||||
Object subclass: SIPUserAgent [
|
||||
| transport name last_cseq transactions |
|
||||
Object subclass: SIPUserAgentBase [
|
||||
| transport name last_cseq |
|
||||
<category: 'SIP-Callagent'>
|
||||
<comment: 'I am a user agent'>
|
||||
<comment: 'I am a user agent base'>
|
||||
|
||||
SIPUserAgent class >> createOn: aTransport [
|
||||
SIPUserAgentBase class >> createOn: aTransport [
|
||||
<category: 'factory'>
|
||||
^ self new
|
||||
instVarNamed: #last_cseq put: 0;
|
||||
|
@ -136,13 +136,13 @@ Object subclass: SIPUserAgent [
|
|||
yourself
|
||||
]
|
||||
|
||||
SIPUserAgent class >> branchStart [
|
||||
SIPUserAgentBase class >> branchStart [
|
||||
<category: 'ids'>
|
||||
"magic marker..."
|
||||
^ 'z9hG4bK'
|
||||
]
|
||||
|
||||
SIPUserAgent class >> generateBranch [
|
||||
SIPUserAgentBase class >> generateBranch [
|
||||
| data |
|
||||
data := '%1,%2' % {DateTime now asUTC asSeconds. Random between: 0 and: 99999}.
|
||||
^ SIPBase64 encode: data.
|
||||
|
@ -179,20 +179,62 @@ Object subclass: SIPUserAgent [
|
|||
transport handler: self.
|
||||
]
|
||||
|
||||
transportData: aTransport data: aData [
|
||||
self notYetImplemented
|
||||
]
|
||||
queueData: aDatagram [
|
||||
transport queueData: aDatagram.
|
||||
]
|
||||
]
|
||||
|
||||
SIPUserAgentBase subclass: SIPUserAgent [
|
||||
| transactions retransmit sem |
|
||||
<category: 'SIP-Callagent'>
|
||||
<comment: 'I am a user agent base'>
|
||||
|
||||
transactions [
|
||||
<category: 'private'>
|
||||
^ transactions ifNil: [transactions := OrderedCollection new]
|
||||
]
|
||||
|
||||
addTransaction: aTransaction [
|
||||
self transactions add: aTransaction
|
||||
checkTimeout [
|
||||
<category: 'transactions'>
|
||||
|
||||
sem critical: [
|
||||
self transactions do: [:trans |
|
||||
[trans checkTimeout] on: Error do: [:e |
|
||||
e logException: 'Exception on timeout: %1' % {e tag}
|
||||
area: #sip.
|
||||
].
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
queueData: aDatagram [
|
||||
transport queueData: aDatagram.
|
||||
addTransaction: aTransaction [
|
||||
<category: 'transactions'>
|
||||
sem critical: [
|
||||
self transactions add: aTransaction]
|
||||
]
|
||||
|
||||
start [
|
||||
<category: 'process'>
|
||||
sem := Semaphore forMutualExclusion.
|
||||
retransmit := [
|
||||
[
|
||||
(Delay forMilliseconds: 500) wait.
|
||||
self checkTimeout.
|
||||
] repeat
|
||||
] fork.
|
||||
]
|
||||
|
||||
transportData: aTransport data: aData [
|
||||
| req data |
|
||||
|
||||
[
|
||||
data := aData data copyFrom: 1 to: aData size.
|
||||
data printNl.
|
||||
req := SIPParser parse: data asString.
|
||||
req inspect.
|
||||
'123' printNl.
|
||||
] on: Error do: [:e |
|
||||
e logException: 'Parsing error %1' % {e tag} area: #sip.
|
||||
]
|
||||
]
|
||||
]
|
||||
|
|
|
@ -72,6 +72,10 @@ Object subclass: SIPTransaction [
|
|||
port: dialog destPort.
|
||||
useragent queueData: datagram.
|
||||
]
|
||||
|
||||
checkTimeout [
|
||||
'Check timeout' printNl.
|
||||
]
|
||||
]
|
||||
|
||||
SIPTransaction subclass: SIPInviteTransaction [
|
||||
|
|
Reference in New Issue