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>&nbsp;<BR>&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;inviteTid =3D null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dial=
og =3D null;<BR>&nbsp;<BR>BR.<BR><BR>&gt; Date: Tue, 1 Jul 2008 06:14:10 -0=
400<BR>&gt; From: [email protected]<BR>&gt; Subject: nist-sip =
Digest, Vol 33, Issue 1<BR>&gt; To: [email protected]<BR>&gt; <BR>&gt;=
 Send nist-sip mailing list submissions to<BR>&gt; [email protected]<B=
R>&gt; <BR>&gt; To subscribe or unsubscribe via the World Wide Web, visit<B=
R>&gt; http://www-x.antd.nist.gov/mailman/listinfo/nist-sip<BR>&gt; or, via=
 email, send a message with subject or body 'help' to<BR>&gt; nist-sip-requ=
[email protected]<BR>&gt; <BR>&gt; You can reach the person managing the li=
st at<BR>&gt; [email protected]<BR>&gt; <BR>&gt; When replying, =
please edit your Subject line so it is more specific<BR>&gt; than 'Re: Cont=
ents of nist-sip digest...'<BR>&gt; <BR>&gt; <BR>&gt; Today's Topics:<BR>&g=
t; <BR>&gt; 1. RE: Memory leak in nist implementation<BR>&gt; (Francisco Ja=
vier Tellez Vaquero)<BR>&gt; <BR>&gt; <BR>&gt; ----------------------------=
------------------------------------------<BR>&gt; <BR>&gt; Message: 1<BR>&=
gt; Date: Tue, 1 Jul 2008 12:12:47 +0200<BR>&gt; From: Francisco Javier Tel=
lez Vaquero &lt;[email protected]&gt;<BR>&gt; Subject: RE: [nist-s=
ip] Memory leak in nist implementation<BR>&gt; To: 'M. Ranganathan' &lt;mra=
[email protected]&gt;<BR>&gt; Cc: [email protected]<BR>&gt; Message-ID: &l=
t;[email protected]&gt;<BR>&gt; Content-Type: tex=
t/plain; charset=3D'iso-8859-1'<BR>&gt; <BR>&gt; Skipped content of type mu=
ltipart/alternative-------------- next part --------------<BR>&gt; package =
examples.simplecallsetup;<BR>&gt; <BR>&gt; import javax.sip.*;<BR>&gt; impo=
rt javax.sip.address.*;<BR>&gt; import javax.sip.header.*;<BR>&gt; import j=
avax.sip.message.*;<BR>&gt; import java.util.*;<BR>&gt; <BR>&gt; /**<BR>&gt=
; * This class is a UAC template. Shootist is the guy that shoots and shoot=
me is<BR>&gt; * the guy that gets shot.<BR>&gt; * <BR>&gt; * @author M. Ran=
ganathan<BR>&gt; */<BR>&gt; <BR>&gt; public class Shootist implements SipLi=
stener {<BR>&gt; <BR>&gt; <BR>&gt; private static SipProvider sipProvider;<=
BR>&gt; <BR>&gt; private static AddressFactory addressFactory;<BR>&gt; <BR>=
&gt; private static MessageFactory messageFactory;<BR>&gt; <BR>&gt; private=
 static HeaderFactory headerFactory;<BR>&gt; <BR>&gt; private static SipSta=
ck sipStack;<BR>&gt; <BR>&gt; private ContactHeader contactHeader;<BR>&gt; =
<BR>&gt; private ListeningPoint udpListeningPoint;<BR>&gt; <BR>&gt; private=
 ClientTransaction inviteTid;<BR>&gt; <BR>&gt; private Dialog dialog;<BR>&g=
t; <BR>&gt; protected static final String usageString =3D 'java '<BR>&gt; +=
 'examples.shootist.Shootist \n'<BR>&gt; + '&gt;&gt;&gt;&gt; is your class =
path set to the root?';<BR>&gt; <BR>&gt; private static void usage() {<BR>&=
gt; System.out.println(usageString);<BR>&gt; System.exit(0);<BR>&gt; <BR>&g=
t; }<BR>&gt; <BR>&gt; public void processRequest(RequestEvent requestReceiv=
edEvent) {<BR>&gt; Request request =3D requestReceivedEvent.getRequest();<B=
R>&gt; ServerTransaction serverTransactionId =3D requestReceivedEvent<BR>&g=
t; .getServerTransaction();<BR>&gt; <BR>&gt; System.out.println('\n\nReques=
t ' + request.getMethod()<BR>&gt; + ' received at ' + sipStack.getStackName=
()<BR>&gt; + ' with server transaction id ' + serverTransactionId);<BR>&gt;=
 <BR>&gt; // We are the UAC so the only request we get is the BYE.<BR>&gt; =
if (request.getMethod().equals(Request.BYE))<BR>&gt; processBye(request, se=
rverTransactionId);<BR>&gt; <BR>&gt; }<BR>&gt; <BR>&gt; public void process=
Bye(Request request,<BR>&gt; ServerTransaction serverTransactionId) {<BR>&g=
t; try {<BR>&gt; System.out.println('shootist: got a bye .');<BR>&gt; if (s=
erverTransactionId =3D=3D null) {<BR>&gt; System.out.println('shootist: nul=
l TID.');<BR>&gt; return;<BR>&gt; }<BR>&gt; Dialog dialog =3D serverTransac=
tionId.getDialog();<BR>&gt; System.out.println('Dialog State =3D ' + dialog=
.getState());<BR>&gt; Response response =3D messageFactory.createResponse(2=
00, request);<BR>&gt; serverTransactionId.sendResponse(response);<BR>&gt; S=
ystem.out.println('shootist: Sending OK.');<BR>&gt; System.out.println('Dia=
log State =3D ' + dialog.getState());<BR>&gt; <BR>&gt; } catch (Exception e=
x) {<BR>&gt; ex.printStackTrace();<BR>&gt; System.exit(0);<BR>&gt; <BR>&gt;=
 }<BR>&gt; }<BR>&gt; <BR>&gt; public void processResponse(ResponseEvent res=
ponseReceivedEvent) {<BR>&gt; System.out.println('Got a response');<BR>&gt;=
 Response response =3D (Response) responseReceivedEvent.getResponse();<BR>&=
gt; ClientTransaction tid =3D responseReceivedEvent.getClientTransaction();=
<BR>&gt; CSeqHeader cseq =3D (CSeqHeader) response.getHeader(CSeqHeader.NAM=
E);<BR>&gt; <BR>&gt; System.out.println('Response received : Status Code =
=3D '<BR>&gt; + response.getStatusCode() + ' ' + cseq);<BR>&gt; if (tid =3D=
=3D null) {<BR>&gt; System.out.println('Stray response -- dropping ');<BR>&=
gt; return;<BR>&gt; }<BR>&gt; System.out.println('transaction state is ' + =
tid.getState());<BR>&gt; System.out.println('Dialog =3D ' + tid.getDialog()=
);<BR>&gt; System.out.println('Dialog State is ' + tid.getDialog().getState=
());<BR>&gt; <BR>&gt; try {<BR>&gt; if (response.getStatusCode() =3D=3D Res=
ponse.OK) {<BR>&gt; if (cseq.getMethod().equals(Request.INVITE)) {<BR>&gt; =
Request ackRequest =3D dialog.createRequest(Request.ACK);<BR>&gt; System.ou=
t.println('Sending ACK');<BR>&gt; dialog.sendAck(ackRequest);<BR>&gt; <BR>&=
gt; Thread.sleep(2000);<BR>&gt; Request byeRequest =3D dialog.createRequest=
(Request.BYE);<BR>&gt; ClientTransaction ct =3D sipProvider<BR>&gt; .getNew=
ClientTransaction(byeRequest);<BR>&gt; dialog.sendRequest(ct);<BR>&gt; } el=
se if (cseq.getMethod().equals(Request.CANCEL)) {<BR>&gt; if (dialog.getSta=
te() =3D=3D DialogState.CONFIRMED) {<BR>&gt; // oops cancel went in too lat=
e. Need to hang up the<BR>&gt; // dialog.<BR>&gt; System.out<BR>&gt; .print=
ln('Sending BYE -- cancel went in too late !!');<BR>&gt; Request byeRequest=
 =3D dialog.createRequest(Request.BYE);<BR>&gt; ClientTransaction ct =3D si=
pProvider<BR>&gt; .getNewClientTransaction(byeRequest);<BR>&gt; dialog.send=
Request(ct);<BR>&gt; <BR>&gt; }<BR>&gt; <BR>&gt; }<BR>&gt; }<BR>&gt; } catc=
h (Exception ex) {<BR>&gt; ex.printStackTrace();<BR>&gt; System.exit(0);<BR=
>&gt; }<BR>&gt; <BR>&gt; }<BR>&gt; <BR>&gt; public void processTimeout(java=
x.sip.TimeoutEvent timeoutEvent) {<BR>&gt; <BR>&gt; System.out.println('Tra=
nsaction Time out');<BR>&gt; }<BR>&gt; <BR>&gt; public void sendCancel() {<=
BR>&gt; try {<BR>&gt; System.out.println('Sending cancel');<BR>&gt; Request=
 cancelRequest =3D inviteTid.createCancel();<BR>&gt; ClientTransaction canc=
elTid =3D sipProvider<BR>&gt; .getNewClientTransaction(cancelRequest);<BR>&=
gt; cancelTid.sendRequest();<BR>&gt; } catch (Exception ex) {<BR>&gt; ex.pr=
intStackTrace();<BR>&gt; }<BR>&gt; }<BR>&gt; <BR>&gt; public void init() {<=
BR>&gt; SipFactory sipFactory =3D null;<BR>&gt; sipStack =3D null;<BR>&gt; =
sipFactory =3D SipFactory.getInstance();<BR>&gt; sipFactory.setPathName('go=
v.nist');<BR>&gt; Properties properties =3D new Properties();<BR>&gt; // If=
 you want to try TCP transport change the following to<BR>&gt; String trans=
port =3D 'udp';<BR>&gt; String peerHostPort =3D '127.0.0.1:7008';<BR>&gt; p=
roperties.setProperty('javax.sip.OUTBOUND_PROXY', peerHostPort + '/'<BR>&gt=
; + transport);<BR>&gt; // If you want to use UDP then uncomment this.<BR>&=
gt; properties.setProperty('javax.sip.STACK_NAME', 'shootist');<BR>&gt; <BR=
>&gt; // The following properties are specific to nist-sip<BR>&gt; // and a=
re not necessarily part of any other jain-sip<BR>&gt; // implementation.<BR=
>&gt; // You can set a max message size for tcp transport to<BR>&gt; // gua=
rd against denial of service attack.<BR>&gt; properties<BR>&gt; .setPropert=
y('gov.nist.javax.sip.MAX_MESSAGE_SIZE', '1048576');<BR>&gt; properties.set=
Property('gov.nist.javax.sip.DEBUG_LOG',<BR>&gt; 'shootistdebug.txt');<BR>&=
gt; properties.setProperty('gov.nist.javax.sip.SERVER_LOG',<BR>&gt; 'shooti=
stlog.txt');<BR>&gt; <BR>&gt; // Drop the client connection after we are do=
ne with the transaction.<BR>&gt; properties.setProperty('gov.nist.javax.sip=
.CACHE_CLIENT_CONNECTIONS',<BR>&gt; 'false');<BR>&gt; // Set to 0 in your p=
roduction code for max speed.<BR>&gt; // You need 16 for logging traces. 32=
 for debug + traces.<BR>&gt; // Your code will limp at 32 but it is best fo=
r debugging.<BR>&gt; properties.setProperty('gov.nist.javax.sip.TRACE_LEVEL=
', '16');<BR>&gt; <BR>&gt; try {<BR>&gt; // Create SipStack object<BR>&gt; =
sipStack =3D sipFactory.createSipStack(properties);<BR>&gt; System.out.prin=
tln('createSipStack ' + sipStack);<BR>&gt; } catch (PeerUnavailableExceptio=
n e) {<BR>&gt; // could not find<BR>&gt; // gov.nist.jain.protocol.ip.sip.S=
ipStackImpl<BR>&gt; // in the classpath<BR>&gt; e.printStackTrace();<BR>&gt=
; System.err.println(e.getMessage());<BR>&gt; System.exit(0);<BR>&gt; }<BR>=
&gt; <BR>&gt; try {<BR>&gt; headerFactory =3D sipFactory.createHeaderFactor=
y();<BR>&gt; addressFactory =3D sipFactory.createAddressFactory();<BR>&gt; =
messageFactory =3D sipFactory.createMessageFactory();<BR>&gt; udpListeningP=
oint =3D sipStack.createListeningPoint('127.0.0.1',7010, 'udp');<BR>&gt; si=
pProvider =3D sipStack.createSipProvider(udpListeningPoint);<BR>&gt; Shooti=
st listener =3D this;<BR>&gt; sipProvider.addSipListener(listener);<BR>&gt;=
 <BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; String fromName =3D 'BigGuy';<BR>&gt; =
String fromSipAddress =3D 'here.com';<BR>&gt; String fromDisplayName =3D 'T=
he Master Blaster';<BR>&gt; <BR>&gt; String toSipAddress =3D 'there.com';<B=
R>&gt; String toUser =3D 'LittleGuy';<BR>&gt; String toDisplayName =3D 'The=
 Little Blister';<BR>&gt; <BR>&gt; // create &gt;From Header<BR>&gt; SipURI=
 fromAddress =3D addressFactory.createSipURI(fromName,<BR>&gt; fromSipAddre=
ss);<BR>&gt; <BR>&gt; Address fromNameAddress =3D addressFactory.createAddr=
ess(fromAddress);<BR>&gt; fromNameAddress.setDisplayName(fromDisplayName);<=
BR>&gt; FromHeader fromHeader =3D headerFactory.createFromHeader(<BR>&gt; f=
romNameAddress, '12345');<BR>&gt; <BR>&gt; // create To Header<BR>&gt; SipU=
RI toAddress =3D addressFactory<BR>&gt; .createSipURI(toUser, toSipAddress)=
;<BR>&gt; Address toNameAddress =3D addressFactory.createAddress(toAddress)=
;<BR>&gt; toNameAddress.setDisplayName(toDisplayName);<BR>&gt; ToHeader toH=
eader =3D headerFactory.createToHeader(toNameAddress,<BR>&gt; null);<BR>&gt=
; <BR>&gt; // create Request URI<BR>&gt; SipURI requestURI =3D addressFacto=
ry.createSipURI(toUser,<BR>&gt; peerHostPort);<BR>&gt; <BR>&gt; // Create V=
iaHeaders<BR>&gt; <BR>&gt; ArrayList viaHeaders =3D new ArrayList();<BR>&gt=
; ViaHeader viaHeader =3D headerFactory.createViaHeader('127.0.0.1', sipPro=
vider.getListeningPoint(transport).getPort(),<BR>&gt; transport, null);<BR>=
&gt; <BR>&gt; // add via headers<BR>&gt; viaHeaders.add(viaHeader);<BR>&gt;=
 <BR>&gt; // Create ContentTypeHeader<BR>&gt; ContentTypeHeader contentType=
Header =3D headerFactory<BR>&gt; .createContentTypeHeader('application', 's=
dp');<BR>&gt; <BR>&gt; // Create a new CallId header<BR>&gt; CallIdHeader c=
allIdHeader =3D sipProvider.getNewCallId();<BR>&gt; <BR>&gt; // Create a ne=
w Cseq header<BR>&gt; CSeqHeader cSeqHeader =3D headerFactory.createCSeqHea=
der(1,<BR>&gt; Request.INVITE);<BR>&gt; <BR>&gt; // Create a new MaxForward=
sHeader<BR>&gt; MaxForwardsHeader maxForwards =3D headerFactory<BR>&gt; .cr=
eateMaxForwardsHeader(70);<BR>&gt; <BR>&gt; // Create the request.<BR>&gt; =
Request request =3D messageFactory.createRequest(requestURI,<BR>&gt; Reques=
t.INVITE, callIdHeader, cSeqHeader, fromHeader,<BR>&gt; toHeader, viaHeader=
s, maxForwards);<BR>&gt; // Create contact headers<BR>&gt; String host =3D =
'127.0.0.1';<BR>&gt; <BR>&gt; SipURI contactUrl =3D addressFactory.createSi=
pURI(fromName, host);<BR>&gt; contactUrl.setPort(udpListeningPoint.getPort(=
));<BR>&gt; <BR>&gt; // Create the contact name address.<BR>&gt; SipURI con=
tactURI =3D addressFactory.createSipURI(fromName, host);<BR>&gt; contactURI=
.setPort(sipProvider.getListeningPoint(transport).getPort());<BR>&gt; <BR>&=
gt; Address contactAddress =3D addressFactory.createAddress(contactURI);<BR=
>&gt; <BR>&gt; // Add the contact address.<BR>&gt; contactAddress.setDispla=
yName(fromName);<BR>&gt; <BR>&gt; contactHeader =3D headerFactory.createCon=
tactHeader(contactAddress);<BR>&gt; request.addHeader(contactHeader);<BR>&g=
t; <BR>&gt; // Add the extension header.<BR>&gt; Header extensionHeader =3D=
 headerFactory.createHeader('My-Header',<BR>&gt; 'my header value');<BR>&gt=
; request.addHeader(extensionHeader);<BR>&gt; <BR>&gt; String sdpData =3D '=
v=3D0\r\n'<BR>&gt; + 'o=3D4855 13760799956958020 13760799956958020'<BR>&gt;=
 + ' IN IP4 129.6.55.78\r\n' + 's=3Dmysession session\r\n'<BR>&gt; + 'p=3D+=
46 8 52018010\r\n' + 'c=3DIN IP4 129.6.55.78\r\n'<BR>&gt; + 't=3D0 0\r\n' +=
 'm=3Daudio 6022 RTP/AVP 0 4 18\r\n'<BR>&gt; + 'a=3Drtpmap:0 PCMU/8000\r\n'=
 + 'a=3Drtpmap:4 G723/8000\r\n'<BR>&gt; + 'a=3Drtpmap:18 G729A/8000\r\n' + =
'a=3Dptime:20\r\n';<BR>&gt; byte[] contents =3D sdpData.getBytes();<BR>&gt;=
 <BR>&gt; request.setContent(contents, contentTypeHeader);<BR>&gt; <BR>&gt;=
 extensionHeader =3D headerFactory.createHeader('My-Other-Header',<BR>&gt; =
'my new header value ');<BR>&gt; request.addHeader(extensionHeader);<BR>&gt=
; <BR>&gt; Header callInfoHeader =3D headerFactory.createHeader('Call-Info'=
,<BR>&gt; '&lt;http://www.antd.nist.gov&gt;');<BR>&gt; request.addHeader(ca=
llInfoHeader);<BR>&gt; <BR>&gt; // Create the client transaction.<BR>&gt; i=
nviteTid =3D sipProvider.getNewClientTransaction(request);<BR>&gt; <BR>&gt;=
 // send the request out.<BR>&gt; inviteTid.sendRequest();<BR>&gt; <BR>&gt;=
 dialog =3D inviteTid.getDialog();<BR>&gt; <BR>&gt; } catch (Exception ex) =
{<BR>&gt; System.out.println(ex.getMessage());<BR>&gt; ex.printStackTrace()=
;<BR>&gt; usage();<BR>&gt; }<BR>&gt; }<BR>&gt; <BR>&gt; public static void =
main(String args[]) {<BR>&gt; new Shootist().init();<BR>&gt; <BR>&gt; }<BR>=
&gt; <BR>&gt; public void processIOException(IOExceptionEvent exceptionEven=
t) {<BR>&gt; System.out.println('IOException happened for ' + exceptionEven=
t.getHost() + ' port =3D ' <BR>&gt; + exceptionEvent.getPort());<BR>&gt; <B=
R>&gt; }<BR>&gt; <BR>&gt; public void processTransactionTerminated(<BR>&gt;=
 TransactionTerminatedEvent transactionTerminatedEvent) {<BR>&gt; System.ou=
t.println('Transaction terminated event recieved');<BR>&gt; }<BR>&gt; <BR>&=
gt; public void processDialogTerminated(<BR>&gt; DialogTerminatedEvent dial=
ogTerminatedEvent) {<BR>&gt; System.out.println('dialogTerminatedEvent');<B=
R>&gt; <BR>&gt; }<BR>&gt; }<BR>&gt; -------------- next part --------------=
<BR>&gt; A non-text attachment was scrubbed...<BR>&gt; Name: uas.xml<BR>&gt=
; Type: text/xml<BR>&gt; Size: 4537 bytes<BR>&gt; Desc: not available<BR>&g=
t; Url : http://www-x.antd.nist.gov/mailman/private/nist-sip/attachments/20=
080701/4ea1a4a6/uas.xml<BR>&gt; -------------- next part --------------<BR>=
&gt; A non-text attachment was scrubbed...<BR>&gt; Name: jProfiler.doc<BR>&=
gt; Type: application/octet-stream<BR>&gt; Size: 108032 bytes<BR>&gt; Desc:=
 not available<BR>&gt; Url : http://www-x.antd.nist.gov/mailman/private/nis=
t-sip/attachments/20080701/4ea1a4a6/jProfiler.obj<BR>&gt; <BR>&gt; --------=
----------------------<BR>&gt; <BR>&gt; ___________________________________=
____________<BR>&gt; nist-sip mailing list<BR>&gt; [email protected]<B=
R>&gt; http://www-x.antd.nist.gov/mailman/listinfo/nist-sip<BR>&gt; <BR>&gt=
; <BR>&gt; End of nist-sip Digest, Vol 33, Issue 1<BR>&gt; ****************=
***********************<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_--