java 板


LINE

是JAVA新手..也是SIP新手...现在正在使用JAIN SIP这套API来写我的SIP Client 以下是我想要做的事: 当A电脑使用NOTFY Request传给B电脑..接着B电脑应该要回传200 OK给A电脑... 但是B电脑却没有按照我写的回传.... B电脑而是回传"481 Subscription does not exist"... 我觉得意思是说我没有传先SUBSCRIBE.... 接着我重新写了: 1.B电脑使用SUBSCRIBE Request传给A电脑..接着A电脑回传200 OK给B电脑...(成功) 2.A电脑使用NOTFY Request传给B电脑..接着B电脑应该要回传200 OK给A电脑... 但是还是失败...>///<..依旧是"481 Subscription does not exist"... 一直觉得好像是要把SUBSCRIBE和NOTFY连在一起...不然NOTIFY一直都不知道有 SUBSCRIBE...但是我不知道要如何把他们连在一起??????? 想要请问有哪一位JAVA高手可以指点指点我...谢谢!! ----------------------------------------------------------------------------- 以下是我A.B电脑的程式码 B电脑(传SUBSCRIBE给A) public void makeSUB(String to, String message) throws ParseException, InvalidArgumentException, SipException ,TransactionUnavailableException { SipURI from = addressFactory.createSipURI(getUsername(), getHost() + ":" + getPort()); 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.indexOf("@") + 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(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.createCSeqHeader(1, Request.SUBSCRIBE); MaxForwardsHeader maxForwards = headerFactory .createMaxForwardsHeader(70); Request subscribe = messageFactory.createRequest(requestURI, Request.SUBSCRIBE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); EventHeader eventHeader = headerFactory.createEventHeader("state");//--SUB subscribe.addHeader(eventHeader);//---SUB SipURI contactURI = addressFactory.createSipURI(getUsername(), getHost()); contactURI.setPort(getPort()); Address contactAddress = addressFactory.createAddress(contactURI); contactAddress.setDisplayName(getUsername()); ContactHeader contactHeader = headerFactory .createContactHeader(contactAddress); subscribe.addHeader(contactHeader); ContentTypeHeader contentTypeHeader = headerFactory .createContentTypeHeader("text", "plain"); subscribe.setContent(message, contentTypeHeader); sipProvider.sendRequest(subscribe); } A电脑回200 OK else if(method.equals("SUBSCRIBE")) { FromHeader from = (FromHeader) req.getHeader("From"); messageProcessor.processMessage(from.getAddress().toString(), new String(req.getRawContent())); Response response = null; try { //Reply with OK response = messageFactory.createResponse(200, req); Address contactAddress = addressFactory.createAddress("sip:[email protected]:5061"); contactAddress.setDisplayName("bob"); ContactHeader contactHeader = headerFactory .createContactHeader(contactAddress); response.addHeader(contactHeader); ContentTypeHeader contentTypeHeader = headerFactory .createContentTypeHeader("text", "plain"); response.setContent("OK",contentTypeHeader); sipProvider.sendResponse(response); } catch (Throwable e) { e.printStackTrace(); messageProcessor.processError("Can't send OK reply."); } } A电脑(传NOTIFY给B) public void sendNotify(String to, String message) throws ParseException, InvalidArgumentException, SipException { SipURI from = addressFactory.createSipURI(getUsername(), getHost() + ":" + getPort()); Address fromNameAddress = addressFactory.createAddress(from); fromNameAddress.setDisplayName(getUsername()); FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress, "vinbabyclientv1.0"); String username = to.substring(to.indexOf(":") + 1, to.indexOf("@")); String address = to.substring(to.indexOf("@") + 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(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.createCSeqHeader(1, Request.NOTIFY); MaxForwardsHeader maxForwards = headerFactory .createMaxForwardsHeader(70); Request request = messageFactory.createRequest(requestURI, Request.NOTIFY, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); EventHeader eventHeader = headerFactory.createEventHeader("state");//-NOTIFY request.addHeader(eventHeader);//--------NOTIFY SipURI contactURI = addressFactory.createSipURI(getUsername(), getHost()); contactURI.setPort(getPort()); Address contactAddress = addressFactory.createAddress(contactURI); contactAddress.setDisplayName(getUsername()); ContactHeader contactHeader = headerFactory .createContactHeader(contactAddress); request.addHeader(contactHeader); ContentTypeHeader contentTypeHeader = headerFactory .createContentTypeHeader("text", "plain"); request.setContent(message, contentTypeHeader); sipProvider.sendRequest(request); } B电脑应该要回传200 OK(但是他却回传481) else if (method.equals("NOTIFY"))//----------send 200 OK { if(((EventHeader)req.getHeader(EventHeader.NAME)) .getEventType().equalsIgnoreCase("state")) { FromHeader from = (FromHeader) req.getHeader("From"); messageProcessor.processMessage(from.getAddress().toString(), new String(req.getRawContent())); Response response = null; SubscriptionStateHeader subscriptionStateHeader= null; try { //Reply with OK response = messageFactory.createResponse(200, req); subscriptionStateHeader= headerFactory.createSubscriptionStateHeader (SubscriptionStateHeader.TERMINATED); response.addHeader(subscriptionStateHeader); sipProvider.sendResponse(response); } catch (Throwable e) { e.printStackTrace(); messageProcessor.processError("Can't send OK reply."); } } } --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.152.197
1F:推 smayday:你是在做SIP Presence吧? 05/24 22:59
2F:推 smayday:你这已是完整的程式码? 我看应该是A电脑传notify讯息时 05/25 11:40
3F:→ smayday:未夹带负责记录presentity state的PIDF document, 所以B 05/25 11:42
4F:→ smayday:电脑才回应说 "481 Subscription does not exist" 05/25 11:43
5F:→ vinbaby:嗯嗯我是在做SIP Presence....不过不好意思..我不知道你所 05/25 13:02
6F:→ vinbaby:说的PIDF document是什麽??..我上面的程式是部份...不过对 05/25 13:06
7F:→ vinbaby:NOTIFY和SUBSCRIBE来说~~是全部了!! 05/25 13:12







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP