RE: Memory leak in nist implementation
Francisco Javier Tellez Vaquero <[email protected]> Tue, 1 Jul 2008 12:29:01 +0200
| Newsgroups | gmane.comp.voip.nist-sip |
|---|---|
| Message-ID | <[email protected]> |
--_4e81492f-0c4d-4358-9413-5c68bfcbdaa8_ Content-Type: multipart/alternative; boundary="_137622e9-c330-404a-87bf-e4dbc0a83b82_" --_137622e9-c330-404a-87bf-e4dbc0a83b82_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable Hi again,the file attached as 'Shootist.java' in previous mail didn't conta= in these two lines after sending BYE request: inviteTid =3D null; = dialog =3D null; BR.> Date: Tue, 1 Jul 2008 06:14:10 -0400> From: nist-sip-= [email protected]> Subject: nist-sip Digest, Vol 33, Issue 1> To: nist-= [email protected]> > Send nist-sip mailing list submissions to> nist-sip@an= td.nist.gov> > To subscribe or unsubscribe via the World Wide Web, visit> h= ttp://www-x.antd.nist.gov/mailman/listinfo/nist-sip> or, via email, send a = message with subject or body 'help' to> [email protected]> > Y= ou can reach the person managing the list at> [email protected]>= > When replying, please edit your Subject line so it is more specific> tha= n 'Re: Contents of nist-sip digest...'> > > Today's Topics:> > 1. RE: Memor= y leak in nist implementation> (Francisco Javier Tellez Vaquero)> > > -----= -----------------------------------------------------------------> > Messag= e: 1> Date: Tue, 1 Jul 2008 12:12:47 +0200> From: Francisco Javier Tellez V= aquero <[email protected]>> Subject: RE: [nist-sip] Memory leak in= nist implementation> To: 'M. Ranganathan' <[email protected]>> Cc: nist-sip= @antd.nist.gov> Message-ID: <[email protected]>> = Content-Type: text/plain; charset=3D'iso-8859-1'> > Skipped content of type= multipart/alternative-------------- next part --------------> package exam= ples.simplecallsetup;> > import javax.sip.*;> import javax.sip.address.*;> = import javax.sip.header.*;> import javax.sip.message.*;> import java.util.*= ;> > /**> * This class is a UAC template. Shootist is the guy that shoots a= nd shootme is> * the guy that gets shot.> * > * @author M. Ranganathan> */>= > public class Shootist implements SipListener {> > > private static SipPr= ovider sipProvider;> > private static AddressFactory addressFactory;> > pri= vate static MessageFactory messageFactory;> > private static HeaderFactory = headerFactory;> > private static SipStack sipStack;> > private ContactHeade= r contactHeader;> > private ListeningPoint udpListeningPoint;> > private Cl= ientTransaction inviteTid;> > private Dialog dialog;> > protected static fi= nal String usageString =3D 'java '> + 'examples.shootist.Shootist \n'> + '>= >>> is your class path set to the root?';> > private static void usage() {>= System.out.println(usageString);> System.exit(0);> > }> > public void proc= essRequest(RequestEvent requestReceivedEvent) {> Request request =3D reques= tReceivedEvent.getRequest();> ServerTransaction serverTransactionId =3D req= uestReceivedEvent> .getServerTransaction();> > System.out.println('\n\nRequ= est ' + request.getMethod()> + ' received at ' + sipStack.getStackName()> += ' with server transaction id ' + serverTransactionId);> > // We are the UA= C so the only request we get is the BYE.> if (request.getMethod().equals(Re= quest.BYE))> processBye(request, serverTransactionId);> > }> > public void = processBye(Request request,> ServerTransaction serverTransactionId) {> try = {> System.out.println('shootist: got a bye .');> if (serverTransactionId = =3D=3D null) {> System.out.println('shootist: null TID.');> return;> }> Dia= log dialog =3D serverTransactionId.getDialog();> System.out.println('Dialog= State =3D ' + dialog.getState());> Response response =3D messageFactory.cr= eateResponse(200, request);> serverTransactionId.sendResponse(response);> S= ystem.out.println('shootist: Sending OK.');> System.out.println('Dialog Sta= te =3D ' + dialog.getState());> > } catch (Exception ex) {> ex.printStackTr= ace();> System.exit(0);> > }> }> > public void processResponse(ResponseEven= t responseReceivedEvent) {> System.out.println('Got a response');> Response= response =3D (Response) responseReceivedEvent.getResponse();> ClientTransa= ction tid =3D responseReceivedEvent.getClientTransaction();> CSeqHeader cse= q =3D (CSeqHeader) response.getHeader(CSeqHeader.NAME);> > System.out.print= ln('Response received : Status Code =3D '> + response.getStatusCode() + ' '= + cseq);> if (tid =3D=3D null) {> System.out.println('Stray response -- dr= opping ');> return;> }> System.out.println('transaction state is ' + tid.ge= tState());> System.out.println('Dialog =3D ' + tid.getDialog());> System.ou= t.println('Dialog State is ' + tid.getDialog().getState());> > try {> if (r= esponse.getStatusCode() =3D=3D Response.OK) {> if (cseq.getMethod().equals(= Request.INVITE)) {> Request ackRequest =3D dialog.createRequest(Request.ACK= );> System.out.println('Sending ACK');> dialog.sendAck(ackRequest);> > Thre= ad.sleep(2000);> Request byeRequest =3D dialog.createRequest(Request.BYE);>= ClientTransaction ct =3D sipProvider> .getNewClientTransaction(byeRequest)= ;> dialog.sendRequest(ct);> } else if (cseq.getMethod().equals(Request.CANC= EL)) {> if (dialog.getState() =3D=3D DialogState.CONFIRMED) {> // oops canc= el went in too late. Need to hang up the> // dialog.> System.out> .println(= 'Sending BYE -- cancel went in too late !!');> Request byeRequest =3D dialo= g.createRequest(Request.BYE);> ClientTransaction ct =3D sipProvider> .getNe= wClientTransaction(byeRequest);> dialog.sendRequest(ct);> > }> > }> }> } ca= tch (Exception ex) {> ex.printStackTrace();> System.exit(0);> }> > }> > pub= lic void processTimeout(javax.sip.TimeoutEvent timeoutEvent) {> > System.ou= t.println('Transaction Time out');> }> > public void sendCancel() {> try {>= System.out.println('Sending cancel');> Request cancelRequest =3D inviteTid= .createCancel();> ClientTransaction cancelTid =3D sipProvider> .getNewClien= tTransaction(cancelRequest);> cancelTid.sendRequest();> } catch (Exception = ex) {> ex.printStackTrace();> }> }> > public void init() {> SipFactory sipF= actory =3D null;> sipStack =3D null;> sipFactory =3D SipFactory.getInstance= ();> sipFactory.setPathName('gov.nist');> Properties properties =3D new Pro= perties();> // If you want to try TCP transport change the following to> St= ring transport =3D 'udp';> String peerHostPort =3D '127.0.0.1:7008';> prope= rties.setProperty('javax.sip.OUTBOUND_PROXY', peerHostPort + '/'> + transpo= rt);> // If you want to use UDP then uncomment this.> properties.setPropert= y('javax.sip.STACK_NAME', 'shootist');> > // The following properties are s= pecific to nist-sip> // and are not necessarily part of any other jain-sip>= // implementation.> // You can set a max message size for tcp transport to= > // guard against denial of service attack.> properties> .setProperty('gov= .nist.javax.sip.MAX_MESSAGE_SIZE', '1048576');> properties.setProperty('gov= .nist.javax.sip.DEBUG_LOG',> 'shootistdebug.txt');> properties.setProperty(= 'gov.nist.javax.sip.SERVER_LOG',> 'shootistlog.txt');> > // Drop the client= connection after we are done with the transaction.> properties.setProperty= ('gov.nist.javax.sip.CACHE_CLIENT_CONNECTIONS',> 'false');> // Set to 0 in = your production code for max speed.> // You need 16 for logging traces. 32 = for debug + traces.> // Your code will limp at 32 but it is best for debugg= ing.> properties.setProperty('gov.nist.javax.sip.TRACE_LEVEL', '16');> > tr= y {> // Create SipStack object> sipStack =3D sipFactory.createSipStack(prop= erties);> System.out.println('createSipStack ' + sipStack);> } catch (PeerU= navailableException e) {> // could not find> // gov.nist.jain.protocol.ip.s= ip.SipStackImpl> // in the classpath> e.printStackTrace();> System.err.prin= tln(e.getMessage());> System.exit(0);> }> > try {> headerFactory =3D sipFac= tory.createHeaderFactory();> addressFactory =3D sipFactory.createAddressFac= tory();> messageFactory =3D sipFactory.createMessageFactory();> udpListenin= gPoint =3D sipStack.createListeningPoint('127.0.0.1',7010, 'udp');> sipProv= ider =3D sipStack.createSipProvider(udpListeningPoint);> Shootist listener = =3D this;> sipProvider.addSipListener(listener);> > > > > String fromName = =3D 'BigGuy';> String fromSipAddress =3D 'here.com';> String fromDisplayNam= e =3D 'The Master Blaster';> > String toSipAddress =3D 'there.com';> String= toUser =3D 'LittleGuy';> String toDisplayName =3D 'The Little Blister';> >= // create >From Header> SipURI fromAddress =3D addressFactory.createSipURI= (fromName,> fromSipAddress);> > Address fromNameAddress =3D addressFactory.= createAddress(fromAddress);> fromNameAddress.setDisplayName(fromDisplayName= );> FromHeader fromHeader =3D headerFactory.createFromHeader(> fromNameAddr= ess, '12345');> > // create To Header> SipURI toAddress =3D addressFactory>= .createSipURI(toUser, toSipAddress);> Address toNameAddress =3D addressFac= tory.createAddress(toAddress);> toNameAddress.setDisplayName(toDisplayName)= ;> ToHeader toHeader =3D headerFactory.createToHeader(toNameAddress,> null)= ;> > // create Request URI> SipURI requestURI =3D addressFactory.createSipU= RI(toUser,> peerHostPort);> > // Create ViaHeaders> > ArrayList viaHeaders = =3D new ArrayList();> ViaHeader viaHeader =3D headerFactory.createViaHeader= ('127.0.0.1', sipProvider.getListeningPoint(transport).getPort(),> transpor= t, null);> > // add via headers> viaHeaders.add(viaHeader);> > // Create Co= ntentTypeHeader> ContentTypeHeader contentTypeHeader =3D headerFactory> .cr= eateContentTypeHeader('application', 'sdp');> > // Create a new CallId head= er> CallIdHeader callIdHeader =3D sipProvider.getNewCallId();> > // Create = a new Cseq header> CSeqHeader cSeqHeader =3D headerFactory.createCSeqHeader= (1,> Request.INVITE);> > // Create a new MaxForwardsHeader> MaxForwardsHead= er maxForwards =3D headerFactory> .createMaxForwardsHeader(70);> > // Creat= e the request.> Request request =3D messageFactory.createRequest(requestURI= ,> Request.INVITE, callIdHeader, cSeqHeader, fromHeader,> toHeader, viaHead= ers, maxForwards);> // Create contact headers> String host =3D '127.0.0.1';= > > SipURI contactUrl =3D addressFactory.createSipURI(fromName, host);> con= tactUrl.setPort(udpListeningPoint.getPort());> > // Create the contact name= address.> SipURI contactURI =3D addressFactory.createSipURI(fromName, host= );> contactURI.setPort(sipProvider.getListeningPoint(transport).getPort());= > > Address contactAddress =3D addressFactory.createAddress(contactURI);> >= // Add the contact address.> contactAddress.setDisplayName(fromName);> > c= ontactHeader =3D headerFactory.createContactHeader(contactAddress);> reques= t.addHeader(contactHeader);> > // Add the extension header.> Header extensi= onHeader =3D headerFactory.createHeader('My-Header',> 'my header value');> = request.addHeader(extensionHeader);> > String sdpData =3D 'v=3D0\r\n'> + 'o= =3D4855 13760799956958020 13760799956958020'> + ' IN IP4 129.6.55.78\r\n' += 's=3Dmysession session\r\n'> + 'p=3D+46 8 52018010\r\n' + 'c=3DIN IP4 129.= 6.55.78\r\n'> + 't=3D0 0\r\n' + 'm=3Daudio 6022 RTP/AVP 0 4 18\r\n'> + 'a= =3Drtpmap:0 PCMU/8000\r\n' + 'a=3Drtpmap:4 G723/8000\r\n'> + 'a=3Drtpmap:18= G729A/8000\r\n' + 'a=3Dptime:20\r\n';> byte[] contents =3D sdpData.getByte= s();> > request.setContent(contents, contentTypeHeader);> > extensionHeader= =3D headerFactory.createHeader('My-Other-Header',> 'my new header value ')= ;> request.addHeader(extensionHeader);> > Header callInfoHeader =3D headerF= actory.createHeader('Call-Info',> '<http://www.antd.nist.gov>');> request.a= ddHeader(callInfoHeader);> > // Create the client transaction.> inviteTid = =3D sipProvider.getNewClientTransaction(request);> > // send the request ou= t.> inviteTid.sendRequest();> > dialog =3D inviteTid.getDialog();> > } catc= h (Exception ex) {> System.out.println(ex.getMessage());> ex.printStackTrac= e();> usage();> }> }> > public static void main(String args[]) {> new Shoot= ist().init();> > }> > public void processIOException(IOExceptionEvent excep= tionEvent) {> System.out.println('IOException happened for ' + exceptionEve= nt.getHost() + ' port =3D ' > + exceptionEvent.getPort());> > }> > public v= oid processTransactionTerminated(> TransactionTerminatedEvent transactionTe= rminatedEvent) {> System.out.println('Transaction terminated event recieved= ');> }> > public void processDialogTerminated(> DialogTerminatedEvent dialo= gTerminatedEvent) {> System.out.println('dialogTerminatedEvent');> > }> }> = -------------- next part --------------> A non-text attachment was scrubbed= ...> Name: uas.xml> Type: text/xml> Size: 4537 bytes> Desc: not available> = Url : http://www-x.antd.nist.gov/mailman/private/nist-sip/attachments/20080= 701/4ea1a4a6/uas.xml> -------------- next part --------------> A non-text a= ttachment was scrubbed...> Name: jProfiler.doc> Type: application/octet-str= eam> Size: 108032 bytes> Desc: not available> Url : http://www-x.antd.nist.= gov/mailman/private/nist-sip/attachments/20080701/4ea1a4a6/jProfiler.obj> >= ------------------------------> > ________________________________________= _______> nist-sip mailing list> [email protected]> http://www-x.antd.n= ist.gov/mailman/listinfo/nist-sip> > > End of nist-sip Digest, Vol 33, Issu= e 1> *************************************** _________________________________________________________________ Tecnolog=EDa, moda, motor, viajes,=85suscr=EDbete a nuestros boletines para= estar siempre a la =FAltima Guapos y guapas, clips musicales y estrenos de cine. = --_137622e9-c330-404a-87bf-e4dbc0a83b82_ Content-Type: text/html; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable <html> <head> <style> .hmmessage P { margin:0px; padding:0px } body.hmmessage { FONT-SIZE: 10pt; FONT-FAMILY:Tahoma } </style> </head> <body class=3D'hmmessage'> Hi again,<BR>the file attached as 'Shootist.java' in previous mail didn't c= ontain these two lines after sending BYE request:<BR> <BR> = inviteTid =3D null;<BR> dial= og =3D null;<BR> <BR>BR.<BR><BR>> Date: Tue, 1 Jul 2008 06:14:10 -0= 400<BR>> From: [email protected]<BR>> Subject: nist-sip = Digest, Vol 33, Issue 1<BR>> To: [email protected]<BR>> <BR>>= Send nist-sip mailing list submissions to<BR>> [email protected]<B= R>> <BR>> To subscribe or unsubscribe via the World Wide Web, visit<B= R>> http://www-x.antd.nist.gov/mailman/listinfo/nist-sip<BR>> or, via= email, send a message with subject or body 'help' to<BR>> nist-sip-requ= [email protected]<BR>> <BR>> You can reach the person managing the li= st at<BR>> [email protected]<BR>> <BR>> When replying, = please edit your Subject line so it is more specific<BR>> than 'Re: Cont= ents of nist-sip digest...'<BR>> <BR>> <BR>> Today's Topics:<BR>&g= t; <BR>> 1. RE: Memory leak in nist implementation<BR>> (Francisco Ja= vier Tellez Vaquero)<BR>> <BR>> <BR>> ----------------------------= ------------------------------------------<BR>> <BR>> Message: 1<BR>&= gt; Date: Tue, 1 Jul 2008 12:12:47 +0200<BR>> From: Francisco Javier Tel= lez Vaquero <[email protected]><BR>> Subject: RE: [nist-s= ip] Memory leak in nist implementation<BR>> To: 'M. Ranganathan' <mra= [email protected]><BR>> Cc: [email protected]<BR>> Message-ID: &l= t;[email protected]><BR>> Content-Type: tex= t/plain; charset=3D'iso-8859-1'<BR>> <BR>> Skipped content of type mu= ltipart/alternative-------------- next part --------------<BR>> package = examples.simplecallsetup;<BR>> <BR>> import javax.sip.*;<BR>> impo= rt javax.sip.address.*;<BR>> import javax.sip.header.*;<BR>> import j= avax.sip.message.*;<BR>> import java.util.*;<BR>> <BR>> /**<BR>>= ; * This class is a UAC template. Shootist is the guy that shoots and shoot= me is<BR>> * the guy that gets shot.<BR>> * <BR>> * @author M. Ran= ganathan<BR>> */<BR>> <BR>> public class Shootist implements SipLi= stener {<BR>> <BR>> <BR>> private static SipProvider sipProvider;<= BR>> <BR>> private static AddressFactory addressFactory;<BR>> <BR>= > private static MessageFactory messageFactory;<BR>> <BR>> private= static HeaderFactory headerFactory;<BR>> <BR>> private static SipSta= ck sipStack;<BR>> <BR>> private ContactHeader contactHeader;<BR>> = <BR>> private ListeningPoint udpListeningPoint;<BR>> <BR>> private= ClientTransaction inviteTid;<BR>> <BR>> private Dialog dialog;<BR>&g= t; <BR>> protected static final String usageString =3D 'java '<BR>> += 'examples.shootist.Shootist \n'<BR>> + '>>>> is your class = path set to the root?';<BR>> <BR>> private static void usage() {<BR>&= gt; System.out.println(usageString);<BR>> System.exit(0);<BR>> <BR>&g= t; }<BR>> <BR>> public void processRequest(RequestEvent requestReceiv= edEvent) {<BR>> Request request =3D requestReceivedEvent.getRequest();<B= R>> ServerTransaction serverTransactionId =3D requestReceivedEvent<BR>&g= t; .getServerTransaction();<BR>> <BR>> System.out.println('\n\nReques= t ' + request.getMethod()<BR>> + ' received at ' + sipStack.getStackName= ()<BR>> + ' with server transaction id ' + serverTransactionId);<BR>>= <BR>> // We are the UAC so the only request we get is the BYE.<BR>> = if (request.getMethod().equals(Request.BYE))<BR>> processBye(request, se= rverTransactionId);<BR>> <BR>> }<BR>> <BR>> public void process= Bye(Request request,<BR>> ServerTransaction serverTransactionId) {<BR>&g= t; try {<BR>> System.out.println('shootist: got a bye .');<BR>> if (s= erverTransactionId =3D=3D null) {<BR>> System.out.println('shootist: nul= l TID.');<BR>> return;<BR>> }<BR>> Dialog dialog =3D serverTransac= tionId.getDialog();<BR>> System.out.println('Dialog State =3D ' + dialog= .getState());<BR>> Response response =3D messageFactory.createResponse(2= 00, request);<BR>> serverTransactionId.sendResponse(response);<BR>> S= ystem.out.println('shootist: Sending OK.');<BR>> System.out.println('Dia= log State =3D ' + dialog.getState());<BR>> <BR>> } catch (Exception e= x) {<BR>> ex.printStackTrace();<BR>> System.exit(0);<BR>> <BR>>= }<BR>> }<BR>> <BR>> public void processResponse(ResponseEvent res= ponseReceivedEvent) {<BR>> System.out.println('Got a response');<BR>>= Response response =3D (Response) responseReceivedEvent.getResponse();<BR>&= gt; ClientTransaction tid =3D responseReceivedEvent.getClientTransaction();= <BR>> CSeqHeader cseq =3D (CSeqHeader) response.getHeader(CSeqHeader.NAM= E);<BR>> <BR>> System.out.println('Response received : Status Code = =3D '<BR>> + response.getStatusCode() + ' ' + cseq);<BR>> if (tid =3D= =3D null) {<BR>> System.out.println('Stray response -- dropping ');<BR>&= gt; return;<BR>> }<BR>> System.out.println('transaction state is ' + = tid.getState());<BR>> System.out.println('Dialog =3D ' + tid.getDialog()= );<BR>> System.out.println('Dialog State is ' + tid.getDialog().getState= ());<BR>> <BR>> try {<BR>> if (response.getStatusCode() =3D=3D Res= ponse.OK) {<BR>> if (cseq.getMethod().equals(Request.INVITE)) {<BR>> = Request ackRequest =3D dialog.createRequest(Request.ACK);<BR>> System.ou= t.println('Sending ACK');<BR>> dialog.sendAck(ackRequest);<BR>> <BR>&= gt; Thread.sleep(2000);<BR>> Request byeRequest =3D dialog.createRequest= (Request.BYE);<BR>> ClientTransaction ct =3D sipProvider<BR>> .getNew= ClientTransaction(byeRequest);<BR>> dialog.sendRequest(ct);<BR>> } el= se if (cseq.getMethod().equals(Request.CANCEL)) {<BR>> if (dialog.getSta= te() =3D=3D DialogState.CONFIRMED) {<BR>> // oops cancel went in too lat= e. Need to hang up the<BR>> // dialog.<BR>> System.out<BR>> .print= ln('Sending BYE -- cancel went in too late !!');<BR>> Request byeRequest= =3D dialog.createRequest(Request.BYE);<BR>> ClientTransaction ct =3D si= pProvider<BR>> .getNewClientTransaction(byeRequest);<BR>> dialog.send= Request(ct);<BR>> <BR>> }<BR>> <BR>> }<BR>> }<BR>> } catc= h (Exception ex) {<BR>> ex.printStackTrace();<BR>> System.exit(0);<BR= >> }<BR>> <BR>> }<BR>> <BR>> public void processTimeout(java= x.sip.TimeoutEvent timeoutEvent) {<BR>> <BR>> System.out.println('Tra= nsaction Time out');<BR>> }<BR>> <BR>> public void sendCancel() {<= BR>> try {<BR>> System.out.println('Sending cancel');<BR>> Request= cancelRequest =3D inviteTid.createCancel();<BR>> ClientTransaction canc= elTid =3D sipProvider<BR>> .getNewClientTransaction(cancelRequest);<BR>&= gt; cancelTid.sendRequest();<BR>> } catch (Exception ex) {<BR>> ex.pr= intStackTrace();<BR>> }<BR>> }<BR>> <BR>> public void init() {<= BR>> SipFactory sipFactory =3D null;<BR>> sipStack =3D null;<BR>> = sipFactory =3D SipFactory.getInstance();<BR>> sipFactory.setPathName('go= v.nist');<BR>> Properties properties =3D new Properties();<BR>> // If= you want to try TCP transport change the following to<BR>> String trans= port =3D 'udp';<BR>> String peerHostPort =3D '127.0.0.1:7008';<BR>> p= roperties.setProperty('javax.sip.OUTBOUND_PROXY', peerHostPort + '/'<BR>>= ; + transport);<BR>> // If you want to use UDP then uncomment this.<BR>&= gt; properties.setProperty('javax.sip.STACK_NAME', 'shootist');<BR>> <BR= >> // The following properties are specific to nist-sip<BR>> // and a= re not necessarily part of any other jain-sip<BR>> // implementation.<BR= >> // You can set a max message size for tcp transport to<BR>> // gua= rd against denial of service attack.<BR>> properties<BR>> .setPropert= y('gov.nist.javax.sip.MAX_MESSAGE_SIZE', '1048576');<BR>> properties.set= Property('gov.nist.javax.sip.DEBUG_LOG',<BR>> 'shootistdebug.txt');<BR>&= gt; properties.setProperty('gov.nist.javax.sip.SERVER_LOG',<BR>> 'shooti= stlog.txt');<BR>> <BR>> // Drop the client connection after we are do= ne with the transaction.<BR>> properties.setProperty('gov.nist.javax.sip= .CACHE_CLIENT_CONNECTIONS',<BR>> 'false');<BR>> // Set to 0 in your p= roduction code for max speed.<BR>> // You need 16 for logging traces. 32= for debug + traces.<BR>> // Your code will limp at 32 but it is best fo= r debugging.<BR>> properties.setProperty('gov.nist.javax.sip.TRACE_LEVEL= ', '16');<BR>> <BR>> try {<BR>> // Create SipStack object<BR>> = sipStack =3D sipFactory.createSipStack(properties);<BR>> System.out.prin= tln('createSipStack ' + sipStack);<BR>> } catch (PeerUnavailableExceptio= n e) {<BR>> // could not find<BR>> // gov.nist.jain.protocol.ip.sip.S= ipStackImpl<BR>> // in the classpath<BR>> e.printStackTrace();<BR>>= ; System.err.println(e.getMessage());<BR>> System.exit(0);<BR>> }<BR>= > <BR>> try {<BR>> headerFactory =3D sipFactory.createHeaderFactor= y();<BR>> addressFactory =3D sipFactory.createAddressFactory();<BR>> = messageFactory =3D sipFactory.createMessageFactory();<BR>> udpListeningP= oint =3D sipStack.createListeningPoint('127.0.0.1',7010, 'udp');<BR>> si= pProvider =3D sipStack.createSipProvider(udpListeningPoint);<BR>> Shooti= st listener =3D this;<BR>> sipProvider.addSipListener(listener);<BR>>= <BR>> <BR>> <BR>> <BR>> String fromName =3D 'BigGuy';<BR>> = String fromSipAddress =3D 'here.com';<BR>> String fromDisplayName =3D 'T= he Master Blaster';<BR>> <BR>> String toSipAddress =3D 'there.com';<B= R>> String toUser =3D 'LittleGuy';<BR>> String toDisplayName =3D 'The= Little Blister';<BR>> <BR>> // create >From Header<BR>> SipURI= fromAddress =3D addressFactory.createSipURI(fromName,<BR>> fromSipAddre= ss);<BR>> <BR>> Address fromNameAddress =3D addressFactory.createAddr= ess(fromAddress);<BR>> fromNameAddress.setDisplayName(fromDisplayName);<= BR>> FromHeader fromHeader =3D headerFactory.createFromHeader(<BR>> f= romNameAddress, '12345');<BR>> <BR>> // create To Header<BR>> SipU= RI toAddress =3D addressFactory<BR>> .createSipURI(toUser, toSipAddress)= ;<BR>> Address toNameAddress =3D addressFactory.createAddress(toAddress)= ;<BR>> toNameAddress.setDisplayName(toDisplayName);<BR>> ToHeader toH= eader =3D headerFactory.createToHeader(toNameAddress,<BR>> null);<BR>>= ; <BR>> // create Request URI<BR>> SipURI requestURI =3D addressFacto= ry.createSipURI(toUser,<BR>> peerHostPort);<BR>> <BR>> // Create V= iaHeaders<BR>> <BR>> ArrayList viaHeaders =3D new ArrayList();<BR>>= ; ViaHeader viaHeader =3D headerFactory.createViaHeader('127.0.0.1', sipPro= vider.getListeningPoint(transport).getPort(),<BR>> transport, null);<BR>= > <BR>> // add via headers<BR>> viaHeaders.add(viaHeader);<BR>>= <BR>> // Create ContentTypeHeader<BR>> ContentTypeHeader contentType= Header =3D headerFactory<BR>> .createContentTypeHeader('application', 's= dp');<BR>> <BR>> // Create a new CallId header<BR>> CallIdHeader c= allIdHeader =3D sipProvider.getNewCallId();<BR>> <BR>> // Create a ne= w Cseq header<BR>> CSeqHeader cSeqHeader =3D headerFactory.createCSeqHea= der(1,<BR>> Request.INVITE);<BR>> <BR>> // Create a new MaxForward= sHeader<BR>> MaxForwardsHeader maxForwards =3D headerFactory<BR>> .cr= eateMaxForwardsHeader(70);<BR>> <BR>> // Create the request.<BR>> = Request request =3D messageFactory.createRequest(requestURI,<BR>> Reques= t.INVITE, callIdHeader, cSeqHeader, fromHeader,<BR>> toHeader, viaHeader= s, maxForwards);<BR>> // Create contact headers<BR>> String host =3D = '127.0.0.1';<BR>> <BR>> SipURI contactUrl =3D addressFactory.createSi= pURI(fromName, host);<BR>> contactUrl.setPort(udpListeningPoint.getPort(= ));<BR>> <BR>> // Create the contact name address.<BR>> SipURI con= tactURI =3D addressFactory.createSipURI(fromName, host);<BR>> contactURI= .setPort(sipProvider.getListeningPoint(transport).getPort());<BR>> <BR>&= gt; Address contactAddress =3D addressFactory.createAddress(contactURI);<BR= >> <BR>> // Add the contact address.<BR>> contactAddress.setDispla= yName(fromName);<BR>> <BR>> contactHeader =3D headerFactory.createCon= tactHeader(contactAddress);<BR>> request.addHeader(contactHeader);<BR>&g= t; <BR>> // Add the extension header.<BR>> Header extensionHeader =3D= headerFactory.createHeader('My-Header',<BR>> 'my header value');<BR>>= ; request.addHeader(extensionHeader);<BR>> <BR>> String sdpData =3D '= v=3D0\r\n'<BR>> + 'o=3D4855 13760799956958020 13760799956958020'<BR>>= + ' IN IP4 129.6.55.78\r\n' + 's=3Dmysession session\r\n'<BR>> + 'p=3D+= 46 8 52018010\r\n' + 'c=3DIN IP4 129.6.55.78\r\n'<BR>> + 't=3D0 0\r\n' += 'm=3Daudio 6022 RTP/AVP 0 4 18\r\n'<BR>> + 'a=3Drtpmap:0 PCMU/8000\r\n'= + 'a=3Drtpmap:4 G723/8000\r\n'<BR>> + 'a=3Drtpmap:18 G729A/8000\r\n' + = 'a=3Dptime:20\r\n';<BR>> byte[] contents =3D sdpData.getBytes();<BR>>= <BR>> request.setContent(contents, contentTypeHeader);<BR>> <BR>>= extensionHeader =3D headerFactory.createHeader('My-Other-Header',<BR>> = 'my new header value ');<BR>> request.addHeader(extensionHeader);<BR>>= ; <BR>> Header callInfoHeader =3D headerFactory.createHeader('Call-Info'= ,<BR>> '<http://www.antd.nist.gov>');<BR>> request.addHeader(ca= llInfoHeader);<BR>> <BR>> // Create the client transaction.<BR>> i= nviteTid =3D sipProvider.getNewClientTransaction(request);<BR>> <BR>>= // send the request out.<BR>> inviteTid.sendRequest();<BR>> <BR>>= dialog =3D inviteTid.getDialog();<BR>> <BR>> } catch (Exception ex) = {<BR>> System.out.println(ex.getMessage());<BR>> ex.printStackTrace()= ;<BR>> usage();<BR>> }<BR>> }<BR>> <BR>> public static void = main(String args[]) {<BR>> new Shootist().init();<BR>> <BR>> }<BR>= > <BR>> public void processIOException(IOExceptionEvent exceptionEven= t) {<BR>> System.out.println('IOException happened for ' + exceptionEven= t.getHost() + ' port =3D ' <BR>> + exceptionEvent.getPort());<BR>> <B= R>> }<BR>> <BR>> public void processTransactionTerminated(<BR>>= TransactionTerminatedEvent transactionTerminatedEvent) {<BR>> System.ou= t.println('Transaction terminated event recieved');<BR>> }<BR>> <BR>&= gt; public void processDialogTerminated(<BR>> DialogTerminatedEvent dial= ogTerminatedEvent) {<BR>> System.out.println('dialogTerminatedEvent');<B= R>> <BR>> }<BR>> }<BR>> -------------- next part --------------= <BR>> A non-text attachment was scrubbed...<BR>> Name: uas.xml<BR>>= ; Type: text/xml<BR>> Size: 4537 bytes<BR>> Desc: not available<BR>&g= t; Url : http://www-x.antd.nist.gov/mailman/private/nist-sip/attachments/20= 080701/4ea1a4a6/uas.xml<BR>> -------------- next part --------------<BR>= > A non-text attachment was scrubbed...<BR>> Name: jProfiler.doc<BR>&= gt; Type: application/octet-stream<BR>> Size: 108032 bytes<BR>> Desc:= not available<BR>> Url : http://www-x.antd.nist.gov/mailman/private/nis= t-sip/attachments/20080701/4ea1a4a6/jProfiler.obj<BR>> <BR>> --------= ----------------------<BR>> <BR>> ___________________________________= ____________<BR>> nist-sip mailing list<BR>> [email protected]<B= R>> http://www-x.antd.nist.gov/mailman/listinfo/nist-sip<BR>> <BR>>= ; <BR>> End of nist-sip Digest, Vol 33, Issue 1<BR>> ****************= ***********************<BR><BR><br /><hr />Sigue de cerca las =FAltimas ten= dencias y lo que m=E1s rompe <a href=3D'http://video.msn.com/video.aspx?mkt= =3Des-es' target=3D'_new'>MSN V=EDdeo</a></body> </html>= --_137622e9-c330-404a-87bf-e4dbc0a83b82_-- --_4e81492f-0c4d-4358-9413-5c68bfcbdaa8_ Content-Type: text/plain Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Shootist.java" cGFja2FnZSBleGFtcGxlcy5zaW1wbGVjYWxsc2V0dXA7DQoNCmltcG9ydCBqYXZheC5zaXAuKjsN CmltcG9ydCBqYXZheC5zaXAuYWRkcmVzcy4qOw0KaW1wb3J0IGphdmF4LnNpcC5oZWFkZXIuKjsN CmltcG9ydCBqYXZheC5zaXAubWVzc2FnZS4qOw0KaW1wb3J0IGphdmEudXRpbC4qOw0KDQovKioN CiAqIFRoaXMgY2xhc3MgaXMgYSBVQUMgdGVtcGxhdGUuIFNob290aXN0IGlzIHRoZSBndXkgdGhh dCBzaG9vdHMgYW5kIHNob290bWUgaXMNCiAqIHRoZSBndXkgdGhhdCBnZXRzIHNob3QuDQogKiAN CiAqIEBhdXRob3IgTS4gUmFuZ2FuYXRoYW4NCiAqLw0KDQpwdWJsaWMgY2xhc3MgU2hvb3Rpc3Qg aW1wbGVtZW50cyBTaXBMaXN0ZW5lciB7DQoNCg0KCXByaXZhdGUgc3RhdGljIFNpcFByb3ZpZGVy IHNpcFByb3ZpZGVyOw0KDQoJcHJpdmF0ZSBzdGF0aWMgQWRkcmVzc0ZhY3RvcnkgYWRkcmVzc0Zh Y3Rvcnk7DQoNCglwcml2YXRlIHN0YXRpYyBNZXNzYWdlRmFjdG9yeSBtZXNzYWdlRmFjdG9yeTsN Cg0KCXByaXZhdGUgc3RhdGljIEhlYWRlckZhY3RvcnkgaGVhZGVyRmFjdG9yeTsNCg0KCXByaXZh dGUgc3RhdGljIFNpcFN0YWNrIHNpcFN0YWNrOw0KDQoJcHJpdmF0ZSBDb250YWN0SGVhZGVyIGNv bnRhY3RIZWFkZXI7DQoNCglwcml2YXRlIExpc3RlbmluZ1BvaW50IHVkcExpc3RlbmluZ1BvaW50 Ow0KDQoJcHJpdmF0ZSBDbGllbnRUcmFuc2FjdGlvbiBpbnZpdGVUaWQ7DQoNCglwcml2YXRlIERp YWxvZyBkaWFsb2c7DQoNCglwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyB1c2FnZVN0cmlu ZyA9ICJqYXZhICINCgkJCSsgImV4YW1wbGVzLnNob290aXN0LlNob290aXN0IFxuIg0KCQkJKyAi Pj4+PiBpcyB5b3VyIGNsYXNzIHBhdGggc2V0IHRvIHRoZSByb290PyI7DQoNCglwcml2YXRlIHN0 YXRpYyB2b2lkIHVzYWdlKCkgew0KCQlTeXN0ZW0ub3V0LnByaW50bG4odXNhZ2VTdHJpbmcpOw0K CQlTeXN0ZW0uZXhpdCgwKTsNCg0KCX0NCg0KCXB1YmxpYyB2b2lkIHByb2Nlc3NSZXF1ZXN0KFJl cXVlc3RFdmVudCByZXF1ZXN0UmVjZWl2ZWRFdmVudCkgew0KCQlSZXF1ZXN0IHJlcXVlc3QgPSBy ZXF1ZXN0UmVjZWl2ZWRFdmVudC5nZXRSZXF1ZXN0KCk7DQoJCVNlcnZlclRyYW5zYWN0aW9uIHNl cnZlclRyYW5zYWN0aW9uSWQgPSByZXF1ZXN0UmVjZWl2ZWRFdmVudA0KCQkJCS5nZXRTZXJ2ZXJU cmFuc2FjdGlvbigpOw0KDQoJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5cblJlcXVlc3QgIiArIHJl cXVlc3QuZ2V0TWV0aG9kKCkNCgkJCQkrICIgcmVjZWl2ZWQgYXQgIiArIHNpcFN0YWNrLmdldFN0 YWNrTmFtZSgpDQoJCQkJKyAiIHdpdGggc2VydmVyIHRyYW5zYWN0aW9uIGlkICIgKyBzZXJ2ZXJU cmFuc2FjdGlvbklkKTsNCg0KCQkvLyBXZSBhcmUgdGhlIFVBQyBzbyB0aGUgb25seSByZXF1ZXN0 IHdlIGdldCBpcyB0aGUgQllFLg0KCQlpZiAocmVxdWVzdC5nZXRNZXRob2QoKS5lcXVhbHMoUmVx dWVzdC5CWUUpKQ0KCQkJcHJvY2Vzc0J5ZShyZXF1ZXN0LCBzZXJ2ZXJUcmFuc2FjdGlvbklkKTsN Cg0KCX0NCg0KCXB1YmxpYyB2b2lkIHByb2Nlc3NCeWUoUmVxdWVzdCByZXF1ZXN0LA0KCQkJU2Vy dmVyVHJhbnNhY3Rpb24gc2VydmVyVHJhbnNhY3Rpb25JZCkgew0KCQl0cnkgew0KCQkJU3lzdGVt Lm91dC5wcmludGxuKCJzaG9vdGlzdDogIGdvdCBhIGJ5ZSAuIik7DQoJCQlpZiAoc2VydmVyVHJh bnNhY3Rpb25JZCA9PSBudWxsKSB7DQoJCQkJU3lzdGVtLm91dC5wcmludGxuKCJzaG9vdGlzdDog IG51bGwgVElELiIpOw0KCQkJCXJldHVybjsNCgkJCX0NCgkJCURpYWxvZyBkaWFsb2cgPSBzZXJ2 ZXJUcmFuc2FjdGlvbklkLmdldERpYWxvZygpOw0KCQkJU3lzdGVtLm91dC5wcmludGxuKCJEaWFs b2cgU3RhdGUgPSAiICsgZGlhbG9nLmdldFN0YXRlKCkpOw0KCQkJUmVzcG9uc2UgcmVzcG9uc2Ug PSBtZXNzYWdlRmFjdG9yeS5jcmVhdGVSZXNwb25zZSgyMDAsIHJlcXVlc3QpOw0KCQkJc2VydmVy VHJhbnNhY3Rpb25JZC5zZW5kUmVzcG9uc2UocmVzcG9uc2UpOw0KCQkJU3lzdGVtLm91dC5wcmlu dGxuKCJzaG9vdGlzdDogIFNlbmRpbmcgT0suIik7DQoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRp YWxvZyBTdGF0ZSA9ICIgKyBkaWFsb2cuZ2V0U3RhdGUoKSk7DQoNCgkJfSBjYXRjaCAoRXhjZXB0 aW9uIGV4KSB7DQoJCQlleC5wcmludFN0YWNrVHJhY2UoKTsNCgkJCVN5c3RlbS5leGl0KDApOw0K DQoJCX0NCgl9DQoNCglwdWJsaWMgdm9pZCBwcm9jZXNzUmVzcG9uc2UoUmVzcG9uc2VFdmVudCBy ZXNwb25zZVJlY2VpdmVkRXZlbnQpIHsNCgkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgYSByZXNw b25zZSIpOw0KCQlSZXNwb25zZSByZXNwb25zZSA9IChSZXNwb25zZSkgcmVzcG9uc2VSZWNlaXZl ZEV2ZW50LmdldFJlc3BvbnNlKCk7DQoJCUNsaWVudFRyYW5zYWN0aW9uIHRpZCA9IHJlc3BvbnNl UmVjZWl2ZWRFdmVudC5nZXRDbGllbnRUcmFuc2FjdGlvbigpOw0KCQlDU2VxSGVhZGVyIGNzZXEg PSAoQ1NlcUhlYWRlcikgcmVzcG9uc2UuZ2V0SGVhZGVyKENTZXFIZWFkZXIuTkFNRSk7DQoNCgkJ U3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSByZWNlaXZlZCA6IFN0YXR1cyBDb2RlID0gIg0K CQkJCSsgcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpICsgIiAiICsgY3NlcSk7DQoJCWlmICh0aWQg PT0gbnVsbCkgew0KCQkJU3lzdGVtLm91dC5wcmludGxuKCJTdHJheSByZXNwb25zZSAtLSBkcm9w cGluZyAiKTsNCgkJCXJldHVybjsNCgkJfQ0KCQlTeXN0ZW0ub3V0LnByaW50bG4oInRyYW5zYWN0 aW9uIHN0YXRlIGlzICIgKyB0aWQuZ2V0U3RhdGUoKSk7DQoJCVN5c3RlbS5vdXQucHJpbnRsbigi RGlhbG9nID0gIiArIHRpZC5nZXREaWFsb2coKSk7DQoJCVN5c3RlbS5vdXQucHJpbnRsbigiRGlh bG9nIFN0YXRlIGlzICIgKyB0aWQuZ2V0RGlhbG9nKCkuZ2V0U3RhdGUoKSk7DQoNCgkJdHJ5IHsN CgkJCWlmIChyZXNwb25zZS5nZXRTdGF0dXNDb2RlKCkgPT0gUmVzcG9uc2UuT0spIHsNCgkJCQlp ZiAoY3NlcS5nZXRNZXRob2QoKS5lcXVhbHMoUmVxdWVzdC5JTlZJVEUpKSB7DQoJCQkJCVJlcXVl c3QgYWNrUmVxdWVzdCA9IGRpYWxvZy5jcmVhdGVSZXF1ZXN0KFJlcXVlc3QuQUNLKTsNCgkJCQkJ U3lzdGVtLm91dC5wcmludGxuKCJTZW5kaW5nIEFDSyIpOw0KCQkJCQlkaWFsb2cuc2VuZEFjayhh Y2tSZXF1ZXN0KTsNCgkJCQkJDQoJCQkJCVRocmVhZC5zbGVlcCgyMDAwKTsNCgkJCQkJUmVxdWVz dCBieWVSZXF1ZXN0ID0gZGlhbG9nLmNyZWF0ZVJlcXVlc3QoUmVxdWVzdC5CWUUpOw0KCQkJCQlD bGllbnRUcmFuc2FjdGlvbiBjdCA9IHNpcFByb3ZpZGVyDQoJCQkJCQkJLmdldE5ld0NsaWVudFRy YW5zYWN0aW9uKGJ5ZVJlcXVlc3QpOw0KCQkJCQlkaWFsb2cuc2VuZFJlcXVlc3QoY3QpOw0KCQkJ CQkNCgkJCQkJaW52aXRlVGlkID0gbnVsbDsNCgkJCQkJZGlhbG9nID0gbnVsbDsNCgkJCQl9IGVs c2UgaWYgKGNzZXEuZ2V0TWV0aG9kKCkuZXF1YWxzKFJlcXVlc3QuQ0FOQ0VMKSkgew0KCQkJCQlp ZiAoZGlhbG9nLmdldFN0YXRlKCkgPT0gRGlhbG9nU3RhdGUuQ09ORklSTUVEKSB7DQoJCQkJCQkv LyBvb3BzIGNhbmNlbCB3ZW50IGluIHRvbyBsYXRlLiBOZWVkIHRvIGhhbmcgdXAgdGhlDQoJCQkJ CQkvLyBkaWFsb2cuDQoJCQkJCQlTeXN0ZW0ub3V0DQoJCQkJCQkJCS5wcmludGxuKCJTZW5kaW5n IEJZRSAtLSBjYW5jZWwgd2VudCBpbiB0b28gbGF0ZSAhISIpOw0KCQkJCQkJUmVxdWVzdCBieWVS ZXF1ZXN0ID0gZGlhbG9nLmNyZWF0ZVJlcXVlc3QoUmVxdWVzdC5CWUUpOw0KCQkJCQkJQ2xpZW50 VHJhbnNhY3Rpb24gY3QgPSBzaXBQcm92aWRlcg0KCQkJCQkJCQkuZ2V0TmV3Q2xpZW50VHJhbnNh Y3Rpb24oYnllUmVxdWVzdCk7DQoJCQkJCQlkaWFsb2cuc2VuZFJlcXVlc3QoY3QpOw0KDQoJCQkJ CX0NCg0KCQkJCX0NCgkJCX0NCgkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7DQoJCQlleC5wcmlu dFN0YWNrVHJhY2UoKTsNCgkJCVN5c3RlbS5leGl0KDApOw0KCQl9DQoNCgl9DQoNCglwdWJsaWMg dm9pZCBwcm9jZXNzVGltZW91dChqYXZheC5zaXAuVGltZW91dEV2ZW50IHRpbWVvdXRFdmVudCkg ew0KDQoJCVN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb24gVGltZSBvdXQiKTsNCgl9DQoN CglwdWJsaWMgdm9pZCBzZW5kQ2FuY2VsKCkgew0KCQl0cnkgew0KCQkJU3lzdGVtLm91dC5wcmlu dGxuKCJTZW5kaW5nIGNhbmNlbCIpOw0KCQkJUmVxdWVzdCBjYW5jZWxSZXF1ZXN0ID0gaW52aXRl VGlkLmNyZWF0ZUNhbmNlbCgpOw0KCQkJQ2xpZW50VHJhbnNhY3Rpb24gY2FuY2VsVGlkID0gc2lw UHJvdmlkZXINCgkJCQkJLmdldE5ld0NsaWVudFRyYW5zYWN0aW9uKGNhbmNlbFJlcXVlc3QpOw0K CQkJY2FuY2VsVGlkLnNlbmRSZXF1ZXN0KCk7DQoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgew0K CQkJZXgucHJpbnRTdGFja1RyYWNlKCk7DQoJCX0NCgl9DQoNCglwdWJsaWMgdm9pZCBpbml0KCkg ew0KCQlTaXBGYWN0b3J5IHNpcEZhY3RvcnkgPSBudWxsOw0KCQlzaXBTdGFjayA9IG51bGw7DQoJ CXNpcEZhY3RvcnkgPSBTaXBGYWN0b3J5LmdldEluc3RhbmNlKCk7DQoJCXNpcEZhY3Rvcnkuc2V0 UGF0aE5hbWUoImdvdi5uaXN0Iik7DQoJCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9w ZXJ0aWVzKCk7DQoJCS8vIElmIHlvdSB3YW50IHRvIHRyeSBUQ1AgdHJhbnNwb3J0IGNoYW5nZSB0 aGUgZm9sbG93aW5nIHRvDQoJCVN0cmluZyB0cmFuc3BvcnQgPSAidWRwIjsNCgkJU3RyaW5nIHBl ZXJIb3N0UG9ydCA9ICIxMjcuMC4wLjE6NzAwOCI7DQoJCXByb3BlcnRpZXMuc2V0UHJvcGVydHko ImphdmF4LnNpcC5PVVRCT1VORF9QUk9YWSIsIHBlZXJIb3N0UG9ydCArICIvIg0KCQkJCSsgdHJh bnNwb3J0KTsNCgkJLy8gSWYgeW91IHdhbnQgdG8gdXNlIFVEUCB0aGVuIHVuY29tbWVudCB0aGlz Lg0KCQlwcm9wZXJ0aWVzLnNldFByb3BlcnR5KCJqYXZheC5zaXAuU1RBQ0tfTkFNRSIsICJzaG9v dGlzdCIpOw0KCQkNCgkJLy8gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBzcGVjaWZpYyB0 byBuaXN0LXNpcA0KCQkvLyBhbmQgYXJlIG5vdCBuZWNlc3NhcmlseSBwYXJ0IG9mIGFueSBvdGhl ciBqYWluLXNpcA0KCQkvLyBpbXBsZW1lbnRhdGlvbi4NCgkJLy8gWW91IGNhbiBzZXQgYSBtYXgg bWVzc2FnZSBzaXplIGZvciB0Y3AgdHJhbnNwb3J0IHRvDQoJCS8vIGd1YXJkIGFnYWluc3QgZGVu aWFsIG9mIHNlcnZpY2UgYXR0YWNrLg0KCQlwcm9wZXJ0aWVzDQoJCQkJLnNldFByb3BlcnR5KCJn b3YubmlzdC5qYXZheC5zaXAuTUFYX01FU1NBR0VfU0laRSIsICIxMDQ4NTc2Iik7DQoJCXByb3Bl cnRpZXMuc2V0UHJvcGVydHkoImdvdi5uaXN0LmphdmF4LnNpcC5ERUJVR19MT0ciLA0KCQkJCSJz aG9vdGlzdGRlYnVnLnR4dCIpOw0KCQlwcm9wZXJ0aWVzLnNldFByb3BlcnR5KCJnb3YubmlzdC5q YXZheC5zaXAuU0VSVkVSX0xPRyIsDQoJCQkJInNob290aXN0bG9nLnR4dCIpOw0KDQoJCS8vIERy b3AgdGhlIGNsaWVudCBjb25uZWN0aW9uIGFmdGVyIHdlIGFyZSBkb25lIHdpdGggdGhlIHRyYW5z YWN0aW9uLg0KCQlwcm9wZXJ0aWVzLnNldFByb3BlcnR5KCJnb3YubmlzdC5qYXZheC5zaXAuQ0FD SEVfQ0xJRU5UX0NPTk5FQ1RJT05TIiwNCgkJCQkiZmFsc2UiKTsNCgkJLy8gU2V0IHRvIDAgaW4g eW91ciBwcm9kdWN0aW9uIGNvZGUgZm9yIG1heCBzcGVlZC4NCgkJLy8gWW91IG5lZWQgMTYgZm9y IGxvZ2dpbmcgdHJhY2VzLiAzMiBmb3IgZGVidWcgKyB0cmFjZXMuDQoJCS8vIFlvdXIgY29kZSB3 aWxsIGxpbXAgYXQgMzIgYnV0IGl0IGlzIGJlc3QgZm9yIGRlYnVnZ2luZy4NCgkJcHJvcGVydGll cy5zZXRQcm9wZXJ0eSgiZ292Lm5pc3QuamF2YXguc2lwLlRSQUNFX0xFVkVMIiwgIjE2Iik7DQoN CgkJdHJ5IHsNCgkJCS8vIENyZWF0ZSBTaXBTdGFjayBvYmplY3QNCgkJCXNpcFN0YWNrID0gc2lw RmFjdG9yeS5jcmVhdGVTaXBTdGFjayhwcm9wZXJ0aWVzKTsNCgkJCVN5c3RlbS5vdXQucHJpbnRs bigiY3JlYXRlU2lwU3RhY2sgIiArIHNpcFN0YWNrKTsNCgkJfSBjYXRjaCAoUGVlclVuYXZhaWxh YmxlRXhjZXB0aW9uIGUpIHsNCgkJCS8vIGNvdWxkIG5vdCBmaW5kDQoJCQkvLyBnb3YubmlzdC5q YWluLnByb3RvY29sLmlwLnNpcC5TaXBTdGFja0ltcGwNCgkJCS8vIGluIHRoZSBjbGFzc3BhdGgN CgkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQoJCQlTeXN0ZW0uZXJyLnByaW50bG4oZS5nZXRNZXNz YWdlKCkpOw0KCQkJU3lzdGVtLmV4aXQoMCk7DQoJCX0NCg0KCQl0cnkgew0KCQkJaGVhZGVyRmFj dG9yeSA9IHNpcEZhY3RvcnkuY3JlYXRlSGVhZGVyRmFjdG9yeSgpOw0KCQkJYWRkcmVzc0ZhY3Rv cnkgPSBzaXBGYWN0b3J5LmNyZWF0ZUFkZHJlc3NGYWN0b3J5KCk7DQoJCQltZXNzYWdlRmFjdG9y eSA9IHNpcEZhY3RvcnkuY3JlYXRlTWVzc2FnZUZhY3RvcnkoKTsNCgkJCXVkcExpc3RlbmluZ1Bv aW50ID0gc2lwU3RhY2suY3JlYXRlTGlzdGVuaW5nUG9pbnQoIjEyNy4wLjAuMSIsNzAxMCwgInVk cCIpOw0KCQkJc2lwUHJvdmlkZXIgPSBzaXBTdGFjay5jcmVhdGVTaXBQcm92aWRlcih1ZHBMaXN0 ZW5pbmdQb2ludCk7DQoJCQlTaG9vdGlzdCBsaXN0ZW5lciA9IHRoaXM7DQoJCQlzaXBQcm92aWRl ci5hZGRTaXBMaXN0ZW5lcihsaXN0ZW5lcik7DQoNCgkJCQ0KCQkJDQoNCgkJCVN0cmluZyBmcm9t TmFtZSA9ICJCaWdHdXkiOw0KCQkJU3RyaW5nIGZyb21TaXBBZGRyZXNzID0gImhlcmUuY29tIjsN CgkJCVN0cmluZyBmcm9tRGlzcGxheU5hbWUgPSAiVGhlIE1hc3RlciBCbGFzdGVyIjsNCg0KCQkJ U3RyaW5nIHRvU2lwQWRkcmVzcyA9ICJ0aGVyZS5jb20iOw0KCQkJU3RyaW5nIHRvVXNlciA9ICJM aXR0bGVHdXkiOw0KCQkJU3RyaW5nIHRvRGlzcGxheU5hbWUgPSAiVGhlIExpdHRsZSBCbGlzdGVy IjsNCg0KCQkJLy8gY3JlYXRlID5Gcm9tIEhlYWRlcg0KCQkJU2lwVVJJIGZyb21BZGRyZXNzID0g YWRkcmVzc0ZhY3RvcnkuY3JlYXRlU2lwVVJJKGZyb21OYW1lLA0KCQkJCQlmcm9tU2lwQWRkcmVz cyk7DQoNCgkJCUFkZHJlc3MgZnJvbU5hbWVBZGRyZXNzID0gYWRkcmVzc0ZhY3RvcnkuY3JlYXRl QWRkcmVzcyhmcm9tQWRkcmVzcyk7DQoJCQlmcm9tTmFtZUFkZHJlc3Muc2V0RGlzcGxheU5hbWUo ZnJvbURpc3BsYXlOYW1lKTsNCgkJCUZyb21IZWFkZXIgZnJvbUhlYWRlciA9IGhlYWRlckZhY3Rv cnkuY3JlYXRlRnJvbUhlYWRlcigNCgkJCQkJZnJvbU5hbWVBZGRyZXNzLCAiMTIzNDUiKTsNCg0K CQkJLy8gY3JlYXRlIFRvIEhlYWRlcg0KCQkJU2lwVVJJIHRvQWRkcmVzcyA9IGFkZHJlc3NGYWN0 b3J5DQoJCQkJCS5jcmVhdGVTaXBVUkkodG9Vc2VyLCB0b1NpcEFkZHJlc3MpOw0KCQkJQWRkcmVz cyB0b05hbWVBZGRyZXNzID0gYWRkcmVzc0ZhY3RvcnkuY3JlYXRlQWRkcmVzcyh0b0FkZHJlc3Mp Ow0KCQkJdG9OYW1lQWRkcmVzcy5zZXREaXNwbGF5TmFtZSh0b0Rpc3BsYXlOYW1lKTsNCgkJCVRv SGVhZGVyIHRvSGVhZGVyID0gaGVhZGVyRmFjdG9yeS5jcmVhdGVUb0hlYWRlcih0b05hbWVBZGRy ZXNzLA0KCQkJCQludWxsKTsNCg0KCQkJLy8gY3JlYXRlIFJlcXVlc3QgVVJJDQoJCQlTaXBVUkkg cmVxdWVzdFVSSSA9IGFkZHJlc3NGYWN0b3J5LmNyZWF0ZVNpcFVSSSh0b1VzZXIsDQoJCQkJCXBl ZXJIb3N0UG9ydCk7DQoNCgkJCS8vIENyZWF0ZSBWaWFIZWFkZXJzDQoNCgkJCUFycmF5TGlzdCB2 aWFIZWFkZXJzID0gbmV3IEFycmF5TGlzdCgpOw0KCQkJVmlhSGVhZGVyIHZpYUhlYWRlciA9IGhl YWRlckZhY3RvcnkuY3JlYXRlVmlhSGVhZGVyKCIxMjcuMC4wLjEiLCBzaXBQcm92aWRlci5nZXRM aXN0ZW5pbmdQb2ludCh0cmFuc3BvcnQpLmdldFBvcnQoKSwNCgkJCQkJdHJhbnNwb3J0LCBudWxs KTsNCg0KCQkJLy8gYWRkIHZpYSBoZWFkZXJzDQoJCQl2aWFIZWFkZXJzLmFkZCh2aWFIZWFkZXIp Ow0KDQoJCQkvLyBDcmVhdGUgQ29udGVudFR5cGVIZWFkZXINCgkJCUNvbnRlbnRUeXBlSGVhZGVy IGNvbnRlbnRUeXBlSGVhZGVyID0gaGVhZGVyRmFjdG9yeQ0KCQkJCQkuY3JlYXRlQ29udGVudFR5 cGVIZWFkZXIoImFwcGxpY2F0aW9uIiwgInNkcCIpOw0KDQoJCQkvLyBDcmVhdGUgYSBuZXcgQ2Fs bElkIGhlYWRlcg0KCQkJQ2FsbElkSGVhZGVyIGNhbGxJZEhlYWRlciA9IHNpcFByb3ZpZGVyLmdl dE5ld0NhbGxJZCgpOw0KDQoJCQkvLyBDcmVhdGUgYSBuZXcgQ3NlcSBoZWFkZXINCgkJCUNTZXFI ZWFkZXIgY1NlcUhlYWRlciA9IGhlYWRlckZhY3RvcnkuY3JlYXRlQ1NlcUhlYWRlcigxLA0KCQkJ CQlSZXF1ZXN0LklOVklURSk7DQoNCgkJCS8vIENyZWF0ZSBhIG5ldyBNYXhGb3J3YXJkc0hlYWRl cg0KCQkJTWF4Rm9yd2FyZHNIZWFkZXIgbWF4Rm9yd2FyZHMgPSBoZWFkZXJGYWN0b3J5DQoJCQkJ CS5jcmVhdGVNYXhGb3J3YXJkc0hlYWRlcig3MCk7DQoNCgkJCS8vIENyZWF0ZSB0aGUgcmVxdWVz dC4NCgkJCVJlcXVlc3QgcmVxdWVzdCA9IG1lc3NhZ2VGYWN0b3J5LmNyZWF0ZVJlcXVlc3QocmVx dWVzdFVSSSwNCgkJCQkJUmVxdWVzdC5JTlZJVEUsIGNhbGxJZEhlYWRlciwgY1NlcUhlYWRlciwg ZnJvbUhlYWRlciwNCgkJCQkJdG9IZWFkZXIsIHZpYUhlYWRlcnMsIG1heEZvcndhcmRzKTsNCgkJ CS8vIENyZWF0ZSBjb250YWN0IGhlYWRlcnMNCgkJCVN0cmluZyBob3N0ID0gIjEyNy4wLjAuMSI7 DQoNCgkJCVNpcFVSSSBjb250YWN0VXJsID0gYWRkcmVzc0ZhY3RvcnkuY3JlYXRlU2lwVVJJKGZy b21OYW1lLCBob3N0KTsNCgkJCWNvbnRhY3RVcmwuc2V0UG9ydCh1ZHBMaXN0ZW5pbmdQb2ludC5n ZXRQb3J0KCkpOw0KDQoJCQkvLyBDcmVhdGUgdGhlIGNvbnRhY3QgbmFtZSBhZGRyZXNzLg0KCQkJ U2lwVVJJIGNvbnRhY3RVUkkgPSBhZGRyZXNzRmFjdG9yeS5jcmVhdGVTaXBVUkkoZnJvbU5hbWUs IGhvc3QpOw0KCQkJY29udGFjdFVSSS5zZXRQb3J0KHNpcFByb3ZpZGVyLmdldExpc3RlbmluZ1Bv aW50KHRyYW5zcG9ydCkuZ2V0UG9ydCgpKTsNCg0KCQkJQWRkcmVzcyBjb250YWN0QWRkcmVzcyA9 IGFkZHJlc3NGYWN0b3J5LmNyZWF0ZUFkZHJlc3MoY29udGFjdFVSSSk7DQoNCgkJCS8vIEFkZCB0 aGUgY29udGFjdCBhZGRyZXNzLg0KCQkJY29udGFjdEFkZHJlc3Muc2V0RGlzcGxheU5hbWUoZnJv bU5hbWUpOw0KDQoJCQljb250YWN0SGVhZGVyID0gaGVhZGVyRmFjdG9yeS5jcmVhdGVDb250YWN0 SGVhZGVyKGNvbnRhY3RBZGRyZXNzKTsNCgkJCXJlcXVlc3QuYWRkSGVhZGVyKGNvbnRhY3RIZWFk ZXIpOw0KDQoJCQkvLyBBZGQgdGhlIGV4dGVuc2lvbiBoZWFkZXIuDQoJCQlIZWFkZXIgZXh0ZW5z aW9uSGVhZGVyID0gaGVhZGVyRmFjdG9yeS5jcmVhdGVIZWFkZXIoIk15LUhlYWRlciIsDQoJCQkJ CSJteSBoZWFkZXIgdmFsdWUiKTsNCgkJCXJlcXVlc3QuYWRkSGVhZGVyKGV4dGVuc2lvbkhlYWRl cik7DQoNCgkJCVN0cmluZyBzZHBEYXRhID0gInY9MFxyXG4iDQoJCQkJCSsgIm89NDg1NSAxMzc2 MDc5OTk1Njk1ODAyMCAxMzc2MDc5OTk1Njk1ODAyMCINCgkJCQkJKyAiIElOIElQNCAgMTI5LjYu NTUuNzhcclxuIiArICJzPW15c2Vzc2lvbiBzZXNzaW9uXHJcbiINCgkJCQkJKyAicD0rNDYgOCA1 MjAxODAxMFxyXG4iICsgImM9SU4gSVA0ICAxMjkuNi41NS43OFxyXG4iDQoJCQkJCSsgInQ9MCAw XHJcbiIgKyAibT1hdWRpbyA2MDIyIFJUUC9BVlAgMCA0IDE4XHJcbiINCgkJCQkJKyAiYT1ydHBt YXA6MCBQQ01VLzgwMDBcclxuIiArICJhPXJ0cG1hcDo0IEc3MjMvODAwMFxyXG4iDQoJCQkJCSsg ImE9cnRwbWFwOjE4IEc3MjlBLzgwMDBcclxuIiArICJhPXB0aW1lOjIwXHJcbiI7DQoJCQlieXRl W10gY29udGVudHMgPSBzZHBEYXRhLmdldEJ5dGVzKCk7DQoNCgkJCXJlcXVlc3Quc2V0Q29udGVu dChjb250ZW50cywgY29udGVudFR5cGVIZWFkZXIpOw0KDQoJCQlleHRlbnNpb25IZWFkZXIgPSBo ZWFkZXJGYWN0b3J5LmNyZWF0ZUhlYWRlcigiTXktT3RoZXItSGVhZGVyIiwNCgkJCQkJIm15IG5l dyBoZWFkZXIgdmFsdWUgIik7DQoJCQlyZXF1ZXN0LmFkZEhlYWRlcihleHRlbnNpb25IZWFkZXIp Ow0KDQoJCQlIZWFkZXIgY2FsbEluZm9IZWFkZXIgPSBoZWFkZXJGYWN0b3J5LmNyZWF0ZUhlYWRl cigiQ2FsbC1JbmZvIiwNCgkJCQkJIjxodHRwOi8vd3d3LmFudGQubmlzdC5nb3Y+Iik7DQoJCQly ZXF1ZXN0LmFkZEhlYWRlcihjYWxsSW5mb0hlYWRlcik7DQoNCgkJCS8vIENyZWF0ZSB0aGUgY2xp ZW50IHRyYW5zYWN0aW9uLg0KCQkJaW52aXRlVGlkID0gc2lwUHJvdmlkZXIuZ2V0TmV3Q2xpZW50 VHJhbnNhY3Rpb24ocmVxdWVzdCk7DQoNCgkJCS8vIHNlbmQgdGhlIHJlcXVlc3Qgb3V0Lg0KCQkJ aW52aXRlVGlkLnNlbmRSZXF1ZXN0KCk7DQoNCgkJCWRpYWxvZyA9IGludml0ZVRpZC5nZXREaWFs b2coKTsNCg0KCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCgkJCVN5c3RlbS5vdXQucHJpbnRs bihleC5nZXRNZXNzYWdlKCkpOw0KCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7DQoJCQl1c2FnZSgp Ow0KCQl9DQoJfQ0KDQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgew0K CQluZXcgU2hvb3Rpc3QoKS5pbml0KCk7DQoNCgl9DQoNCglwdWJsaWMgdm9pZCBwcm9jZXNzSU9F eGNlcHRpb24oSU9FeGNlcHRpb25FdmVudCBleGNlcHRpb25FdmVudCkgew0KCQlTeXN0ZW0ub3V0 LnByaW50bG4oIklPRXhjZXB0aW9uIGhhcHBlbmVkIGZvciAiICsgZXhjZXB0aW9uRXZlbnQuZ2V0 SG9zdCgpICsgIiBwb3J0ID0gIiANCgkJCQkJKyBleGNlcHRpb25FdmVudC5nZXRQb3J0KCkpOw0K DQoJfQ0KDQoJcHVibGljIHZvaWQgcHJvY2Vzc1RyYW5zYWN0aW9uVGVybWluYXRlZCgNCgkJCVRy YW5zYWN0aW9uVGVybWluYXRlZEV2ZW50IHRyYW5zYWN0aW9uVGVybWluYXRlZEV2ZW50KSB7DQoJ CVN5c3RlbS5vdXQucHJpbnRsbigiVHJhbnNhY3Rpb24gdGVybWluYXRlZCBldmVudCByZWNpZXZl ZCIpOw0KCX0NCg0KCXB1YmxpYyB2b2lkIHByb2Nlc3NEaWFsb2dUZXJtaW5hdGVkKA0KCQkJRGlh bG9nVGVybWluYXRlZEV2ZW50IGRpYWxvZ1Rlcm1pbmF0ZWRFdmVudCkgew0KCQlTeXN0ZW0ub3V0 LnByaW50bG4oImRpYWxvZ1Rlcm1pbmF0ZWRFdmVudCIpOw0KDQoJfQ0KfQ0K --_4e81492f-0c4d-4358-9413-5c68bfcbdaa8_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ nist-sip mailing list [email protected] http://www-x.antd.nist.gov/mailman/listinfo/nist-sip --_4e81492f-0c4d-4358-9413-5c68bfcbdaa8_--