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燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP