《送给sip学习者(sip实例).doc》由会员分享,可在线阅读,更多相关《送给sip学习者(sip实例).doc(12页珍藏版)》请在金锄头文库上搜索。
1、第 12 页 共 12 页 时光可见 总结编写-sip学习网站上关于基于sip的java编程实例实在是太少了,这个严重影响了sip的传播和发展,所以我上传了这个小实验,让大家参考下。在做实验前,我们需要一些东西:我的环境:XPEclipse需要包:这个需要在网上自己找,或者hi我,我也可以给你们哈。-百度账号:时光可见好了,现在看程序了哈,主要是三个文件。MessageProcessor.java :public interface MessageProcessor public void processMessage(String sender, String message); publi
2、c void processError(String errorMessage); public void processInfo(String infoMessage);SipLayer.java :import java.text.ParseException;import java.util.*;import javax.sip.*;import javax.sip.address.*;import javax.sip.header.*;import javax.sip.message.*;public class SipLayer implements SipListener priv
3、ate MessageProcessor messageProcessor;private String username;private SipStack sipStack;private SipFactory sipFactory;private AddressFactory addressFactory;private HeaderFactory headerFactory;private MessageFactory messageFactory;private SipProvider sipProvider;/* Here we initialize the SIP stack. *
4、/public SipLayer(String username, String ip, int port)throws PeerUnavailableException, TransportNotSupportedException,InvalidArgumentException, ObjectInUseException,TooManyListenersException setUsername(username);sipFactory = SipFactory.getInstance();sipFactory.setPathName(gov.nist);Properties prope
5、rties = new Properties();properties.setProperty(javax.sip.STACK_NAME, TextClient);properties.setProperty(javax.sip.IP_ADDRESS, ip);/ DEBUGGING: Information will go to files/ textclient.log and textclientdebug.logproperties.setProperty(gov.nist.javax.sip.TRACE_LEVEL, 32);properties.setProperty(gov.ni
6、st.javax.sip.SERVER_LOG, textclient.txt);properties.setProperty(gov.nist.javax.sip.DEBUG_LOG, textclientdebug.log);sipStack = sipFactory.createSipStack(properties);headerFactory = sipFactory.createHeaderFactory();addressFactory = sipFactory.createAddressFactory();messageFactory = sipFactory.createMe
7、ssageFactory();/ListeningPoint tcp = sipStack.createListeningPoint(port, tcp);ListeningPoint udp = sipStack.createListeningPoint(port, udp);/ sipProvider = sipStack.createSipProvider(tcp);/ sipProvider.addSipListener(this);/ suppose UDP is used as transport, Bob Cheng, 03-11-10sipProvider = sipStack
8、.createSipProvider(udp);sipProvider.addSipListener(this);/* * This method uses the SIP stack to send a message. */public void sendMessage(String to, String message) throws ParseException,InvalidArgumentException, SipException SipURI from = addressFactory.createSipURI(getUsername(), getHost() + : + g
9、etPort();Address fromNameAddress = addressFactory.createAddress(from);fromNameAddress.setDisplayName(getUsername();FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress, textclientv1.0);String username = to.substring(to.indexOf(:) + 1, to.indexOf();String address = to.substring(to.i
10、ndexOf() + 1);SipURI toAddress = addressFactory.createSipURI(username, address);Address toNameAddress = addressFactory.createAddress(toAddress);toNameAddress.setDisplayName(username);ToHeader toHeader = headerFactory.createToHeader(toNameAddress, null);SipURI requestURI = addressFactory.createSipURI
11、(username, address);requestURI.setTransportParam(udp);ArrayList viaHeaders = new ArrayList();ViaHeader viaHeader = headerFactory.createViaHeader(getHost(), getPort(), udp, branch1);viaHeaders.add(viaHeader);CallIdHeader callIdHeader = sipProvider.getNewCallId();CSeqHeader cSeqHeader = headerFactory.
12、createCSeqHeader(1, Request.MESSAGE);MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70);Request request = messageFactory.createRequest(requestURI,Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,toHeader, viaHeaders, maxForwards);SipURI contactURI = addressFactory.createS
13、ipURI(getUsername(), getHost();contactURI.setPort(getPort();Address contactAddress = addressFactory.createAddress(contactURI);contactAddress.setDisplayName(getUsername();ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);request.addHeader(contactHeader);ContentTypeHeader
14、 contentTypeHeader = headerFactory.createContentTypeHeader(text, plain);request.setContent(message, contentTypeHeader);sipProvider.sendRequest(request);/* This method is called by the SIP stack when a response arrives. */public void processResponse(ResponseEvent evt) Response response = evt.getResponse();int status = response.getStatusCode();if (status = 200) & (status 300) / Success!messageProcessor.processInfo(-Sent);return;messageProcessor.processError(Previous message not sent: + status);/* * This method is cal