2000.11.01

1. New features

1.1. Asynchronous resolver for SDP "c=" address
1.1.1. implement resolver
1.1.2. Capability Translator: add resolver interface; should be reenterable
1.1.3. Call Translator: add resolver interface?, SDP parser & resolver Feature,
       queue for incoming SDP

1.2. Small fixes & open issues
1.2.1. TrRouterSip: Reply to SIP messages that can not be routed to any
       existing Connection
1.2.2. handle several Invites from forking proxy
1.2.3. handle multiple replies to branched Invite??
1.2.4. hash function for branches
1.2.5. add 'catch' to Event Observers
1.2.6. in EvtTrTerminate: send Ack before Bye if needed & check smartptrs to 0
1.2.7. EvtMediaReady&...: setState after smartPtr assigned (invite&status)
1.2.8. send H.245 address not in 'To:' (in message body)??
1.2.9. cancel all outgoing Invites after receiving 200
1.2.10. ConnectingH2S: send Bye after Cancel
1.2.11. DisplayName parameter to 'From' and 'To'
1.2.12. Handle 480, 503 with retry-after
1.2.13. 481

1.3. H.323 tunneling
1.3.1. Router
1.3.1.1. ConnectionCallCtl
1.3.1.2. ConnectionCallSig
1.3.1.3. add queue for H.245 messages while tunneling is not confirmed
1.3.2. integrate with H.245 bypass

1.4. FastStart
1.4.1. Router
1.4.1.1. ConnectionCallCtl
1.4.1.2. ConnectionCallSig
1.4.1.3. allow creating of LCI/LCO from Capability Translator
1.4.2. Translator
1.4.2.1. call signalling Feature
1.4.3. Capability Translator
1.4.3.1. handle incoming FS OLC (no TCS, no MSD, may be done before/after SDP)
1.4.3.2. create FS OLC from first SDP

1.5. "reInvite", TCS 0, replacementFor
1.5.1. Router
1.5.1.1. implement RCC (request to close channel)
1.5.2. Translator
1.5.2.1. call signalling Feature
1.5.2.2. TrMedia* Features obsolete?
1.5.2.3. new LC Features?
1.5.3. Capability Translator
1.5.3.1 new interface
1.5.3.2. channel manager
1.5.3.3. new message mapping
1.5.3.4. handling "version numbers" in SDP

2. New Capability Translator interface
2.1. Methods
2.1.1. resolved(key, IPAddress) - result of EvtResolve
2.1.2. enterFS(), handleFSOLC(OLC), exitFS() - incoming Fast Start:
       first, enterFS is called, then handleFSOLC is caled for each channel,
       filally - exitFS
2.1.3. handleSDP(SDP), handleTCS(TCS), handleOLC(OLC), handleOLCAck(OLCAck),
       handleCLC(ch), handleRCC(RCC), handleOLCReject(OLCReject) - received
       H.245 or SDP message. handleSDP should be always replied by both
       EvtSDPParseDone and EvtSendSDP
2.1.4. closeInLC(LC), closeOutLC - close logical channel 'LC'
2.1.5. add(event) - register events (see 2.2.), 1 method for each event
2.1.6. setMaster(state) - result of MSD procedure; initially and after TCS 0
       should be set to 'undefined'; values: (m, s, undefined)
2.1.7. setControlChannel(bool) - if true, it is allowed to send H.245 messages
2.1.9. handleEmptySDP - got reInvite with empty SDP
2.1.10. setPhaseC(bool) - if true, it is allowed to start any H.245 procedures,
        including OLC; if false, opening new LC is not allowed, all such
        procedures should be delayed until setPhaseC(true); sending TCS,
        CLC, RCC, and replying to incoming messages is always allowed.
2.1.11. sendSDP() - generate EvtSendSDP immediately (no SDP data should be
	provided if there were no changes since last SDP sending)
2.1.12. sendTCS(int) - send TCS (just ignore if no SDP or SD0 received)
        for parameter = 0, send TCS as is; for parameter = 1, it's recommended
	to simplify TCS; for parameter = 2, it's recommended to simplify TCS
	significantly.

2.2. CallBack events
2.2.1. EvtResolve: key, domain_name
         (to be defined)
2.2.2. router::EvtSendFSOLC: OLC
         e.olc_.m().* = <OLC data>; //TODO
2.2.3. EvtZeroTCS - received zero TCS
2.2.4. EvtZeroSDP - received zero SDP (gotEmptySDP() called or in received SDP
       with c=0)
2.2.5. EvtSendSDP - to prepare SDP message; it will be sent asynchronously
       with reInvite or synchronously with 200 or Ack.
         e.sdp_ = <SDP data in SdpSession object>; //should be present even if
	                                           // change_ == false
	 e.change_ = <true or false>; //true if SDP data has been changed
	        // and should be sent, false if SDP does not have anything new
2.2.6. router::EvtCEOTransferReq (to send TCS)
         e.tcs_.m().* = <TCS data>;
2.2.7. EvtSendOLC
         e.olc_.m().* = <OLC data>; //TODO
2.2.8. router::EvtLCOReleaseReq (to send CLC)
          e.setLCN(lc_number);
          e.clc_.m().m_cause.SetTag(cause);
2.2.9. router::EvtLCIEstablishResp (to send OLCAck)
         e.setLCN(lc_number);
         e.olcAck_.m().* = <other OLCAck fields>;
2.2.10. router::EvtLCIReleaseReq (to send OLCReject)
          e.setLCN(lc_number);
          e.olcReject_.m().m_cause.SetTag(cause);
2.2.11. router::EvtRCORequest (to send RCC)
          e.setLCN(lc_number); //TODO
          e.rcc_.m().m_reason.SetTag(cause);
2.2.12. router::EvtCreateInLC (on faststart): LC number, session number,
        codec, rtp address/port, rtcp address/port
         (to be defined)
2.2.13. router::EvtCreateOutLC (on faststart): LC number, session number,
        codec, rtp address/port, rtcp address/port
         (to be defined)
2.2.14. EvtSDPParseDone (SDP parsing procedure completed, no more async
        resolver requests are needed). After this message CapTranslator is
        ready to receive next SDP. Sent in reply to handleSDP, handleEmptySDP.
2.2.16. router::EvtForceCCOpen - sent to force control channel opening after
        faststart.

3. Translation between H.245 and SDP
3.1. TCS is sent after each SDP message only if capability set has been changed
3.2. SDP is "sent" after aech message if there are any changes to SDP contents
3.3. SDP and  H.245 messages
3.3.1. TCS: if SDP received: make intersect, select codec(s),
       send OLC, CLC if needed, do 3.3.9.*.
3.3.2. OLC: if address/port are known from SDP, send OLCAck; otherwise wait
3.3.3. OLCAck: nothing (see 3.2.)
3.3.4. TCS 0: send SDP 0, CLC for all outgoing channels
3.3.5. RCC: send RCC, CLC, SDP port=0
3.3.6. CLC: send CLC, SDP port=0
3.3.7. first SDP: if TCS received: make intersect, select codec(s),
       send OLC, CLC if needed, do 3.3.9.*.
3.3.8. SDP 0: send TCS 0, CLC for all outgoing channels
3.3.9. new 'm=' in SDP: make intersect, select codec, check attributes...
3.3.9.1. if a=sendonly, send OLC with rtcp port = (port from 'm=') + 1
3.3.9.2. if a=rtcp:<number>, send OLC
3.3.9.3. otherwise do nothing
3.3.9.4. for cases 2 and 3 if port number and address are provided, send OLC
         and do 3.3.11.
3.3.11. port=0 changed to port=x in SDP: if OLC was received, send OLCAck;
        otherwise wait
3.3.12. port=x changed to port=0 in SDP: send RCC and CLC
3.3.13. port=x changed to port=y in SDP: do 3.3.12., then 3.3.11.
3.3.14. 'c=' changed in SDP: same as 3.3.11 - 3.3.13. for every channel
3.3.16. all other cases (not 3.3.7. - 3.3.15.) of SDP: send CLC for all
        outgoing channels, make intersect, send TCS, send OLC for all channels
3.4. Example
3.4.1. H.323->SIP
>Setup
<Invite + SDP 0
>200 + SDP (m=audio 1026 RTP 0 4; m=video 0 RTP 100)
<Connect
<TCS ({0,4}{100})
>TCSAck
>TCS ({0,4}{100,101})
<TCSAck
intersect: {0,4}{100}, selection: {0}{100}
<OLC (m:1, ch:1, codec: 0, rtcp: 1027)
>OLCAck (m:1, ch:1, codec:0, rtp: 1028)
<Ack + SDP (m=audio 1028 RTP 0; m=video 0 RTP 100)
>OLC (m:1, ch:1, codec:0, rtcp: 1029)
<OLCAck (m:1, ch:1, codec:0, rtp: 1026)
>OLC (m:2, ch:2, codec:100, rtcp:1031): reInvite not sent because in SDP port=0
>Invite + SDP (m=audio 1028 RTP 0; m=video 1040 RTP 100)
<OLCAck (m:2, ch:2, codec:100, rtp:1040): if not timed out
<TCS0,TCS...: if video LC timed out(gotCLC called)
<OLC (m:2, ch:2, codec:100, rtp:1041)
>OLCAck (m:2, ch:2, codec:100, rtp:1030)
<200 + SDP (m=audio 1028 RTP 0; m=video 1030 RTP 100)
>Ack + SDP 0
======================================================================

Copyright 2000-2003, Cisco Systems, Inc.
THE INFORMATION HEREIN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT ANY
WARRANTIES OR REPRESENTATIONS, EXPRESS, IMPLIED OR STATUTORY, INCLUDING
WITHOUT LIMITATION, WARRANTIES OF NONINFRINGEMENT, MERCHANTABILITY OR
FITNESS FOR A PARTICULAR PURPOSE.

$Id: v2.txt,v 1.2.2.1 2003/03/28 05:26:01 bko Exp $
