📄 refreshhelper.java
字号:
refreshListenerCallback(refresh, sipResponse.getStatusCode(),
sipResponse.getReasonPhrase());
return;
}
}
catch (Exception exception) {
Protocol
.echo("RefreshHandler: problem in response removing refresh task");
stop(refresh.m_refreshID);
}
}
/**
* compareAddressURI
*
* @param contacts
* @param sipHeader
* @return same one
*/
private SipHeader compareAddressURI(Vector contacts, SipHeader sipHeader) {
for (int i = 0; i < contacts.size(); i++) {
PairStructure t1 = (PairStructure) contacts.elementAt(i);
SipHeader sipheader1 = new SipHeader(t1.getName(), t1.getValue());
SipAddress sipaddress = new SipAddress(sipheader1.getValue());
SipAddress sipaddress1 = new SipAddress(sipHeader.getValue());
if (sipaddress.getURI().equals(((Object) (sipaddress1.getURI()))))
return sipheader1;
}
return null;
}
/**
* refreshListenerCallback
*
* @param refresh
* @param statusCode
* @param reasonPhrase
*/
private void refreshListenerCallback(Refresh refresh, int statusCode,
String reasonPhrase) {
try {
refresh.m_sipRefreshListener.refreshEvent(refresh.m_refreshID,
statusCode, reasonPhrase);
}
catch (Exception exception) {
Integer integer = new Integer(refresh.m_refreshID);
exception.printStackTrace();
Protocol
.echo("RefreshHelper: Problem with refresh listener callback, removing the refresh task!");
if (refresh.m_timer != null)
refresh.m_timer.cancel();
m_refreshIDs.remove(((Object) (integer)));
}
}
/**
* stop
*
* @param refreshID
*/
public void stop(int refreshID) {
Integer integer = new Integer(refreshID);
Refresh b1 = (Refresh) m_refreshIDs.get(((Object) (integer)));
if (b1 != null) {
if (b1.m_timer != null)
b1.m_timer.cancel();
openContentOutputStream(b1, b1.m_sipHeaders, ((String) (null)), 0, 0);
m_refreshIDs.remove(((Object) (integer)));
refreshListenerCallback(b1, 0, "refresh stopped");
}
}
/**
* update
*
* @param refreshID
* @param contact
* @param type
* @param length
* @param expires
* @return OutputStream
*/
public OutputStream update(int refreshID, String contact[], String type,
int length, int expires) {
Refresh b1;
if (expires == 0) {
stop(refreshID);
return null;
}
b1 = (Refresh) m_refreshIDs.get(((Object) (new Integer(refreshID))));
if (b1 != null) {
if (expires > 0) {
b1.m_expiresTime = expires;
}
if (b1.m_timer != null) {
b1.m_timer.cancel();
}
if (contact != null) {
Vector vector = null;
if (b1.m_sipHeaders != null) {
vector = new Vector(b1.m_sipHeaders.length + contact.length);
for (int l = 0; l < b1.m_sipHeaders.length; l++) {
b1.m_sipHeaders[l].setParameter("expires", "0");
vector.addElement(((Object) (b1.m_sipHeaders[l])));
}
}
else {
vector = new Vector(contact.length);
}
for (int i1 = 0; i1 < contact.length; i1++) {
SipHeader sipheader = new SipHeader("Contact", contact[i1]);
for (int k1 = 0; k1 < vector.size(); k1++) {
SipHeader sipheader2 = (SipHeader) vector.elementAt(k1);
SipAddress sipaddress = new SipAddress(sipheader.getValue());
SipAddress sipaddress1 = new SipAddress(sipheader2.getValue());
if (sipaddress.getURI().equals(((Object) (sipaddress1.getURI())))) {
vector.removeElementAt(k1);
}
}
vector.addElement(((Object) (sipheader)));
}
b1.m_sipHeaders = new SipHeader[vector.size()];
for (int j1 = 0; j1 < vector.size(); j1++) {
try {
SipHeader sipheader1 = (SipHeader) vector.elementAt(j1);
b1.m_sipHeaders[j1] = sipheader1;
}
catch (Exception exception1) {
;
}
}
}
try {
OutputStream outputstream = openContentOutputStream(b1,
b1.m_sipHeaders, type, length, expires);
return outputstream;
}
catch (Exception e) {
e.printStackTrace();
stop(refreshID);
}
}
return null;
}
/**
* openContentOutputStream
*
* @param refresh
* @param sipHeader
* @param contentTypeValue
* @param contentLength
* @param expiresTime
* @return OutputStream
*/
public synchronized OutputStream openContentOutputStream(Refresh refresh,
SipHeader sipHeader[], String contentTypeValue, int contentLength,
int expiresTime) {
try {
ClientConnection s2;
String s3;
s2 = null;
if (refresh.m_sipDialog != null) {
s2 = new ClientConnection(refresh.m_sipDialog);
}
else {
try {
s2 = new ClientConnection("user@host", 0, false);
s2.m_sipAddress = refresh.m_sipAddress;
}
catch (IOException ioexception) {
ioexception.printStackTrace();
}
}
s3 = refresh.m_sipRequest.getMethod();
OutputStream outputstream;
if (s3.equals("REGISTER")) {
s2.initRequest(s3,
((com.micromethod.sipstack.i.SipConnectionNotifier) (null)));
SipRequest u1 = (SipRequest) s2.m_sipRequest;
s2.m_sipRequest = ((SipMessage) (refresh.m_sipRequest));
s2.m_sipResponse = ((SipMessage) (refresh.m_sipRequest));
refresh.m_cseqNum++;
s2.m_sipRequest.removeHeaders("Contact");
if (expiresTime == 0) {
s2.addHeader("Contact", "*");
}
else {
for (int k = 0; k < sipHeader.length; k++)
s2.addHeader("Contact", sipHeader[k].getHeaderValue());
}
if (expiresTime != -1) {
s2.setHeader("Expires", Integer.toString(expiresTime));
}
s2.setHeader("CSeq", refresh.m_cseqNum + " " + s3);
s2.m_sipRequest.setHeader("Via", u1.getHeaderValue("Via"), true);
Protocol.echo("RefreshTask: Refreshing " + refresh.m_refreshID
+ " method: " + refresh.m_sipRequest.getMethod());
}
else {
s2.initRequest(s3,
((com.micromethod.sipstack.i.SipConnectionNotifier) (null)));
SipRequest u2 = (SipRequest) s2.m_sipRequest;
s2.m_sipRequest = ((SipMessage) (refresh.m_sipRequest));
s2.m_sipResponse = ((SipMessage) (refresh.m_sipRequest));
s2.m_sipRequest.setHeader("To", u2.getHeaderValue("To"), true);
refresh.m_cseqNum++;
s2.m_sipRequest.setHeader("CSeq", refresh.m_cseqNum + " "
+ refresh.m_sipRequest.getMethod(), true);
s2.m_sipRequest.setHeader("Via", u2.getHeaderValue("Via"), true);
if (expiresTime >= 0) {
s2.setHeader("Expires", "" + expiresTime);
}
Protocol.echo("RefreshTask: Refreshing " + refresh.m_refreshID
+ " method: " + refresh.m_sipRequest.getMethod());
}
s2.m_id = refresh.m_refreshID;
s2.m_sipClientConnectionListenerImpl = this;
s2.setListener(((SipClientConnectionListener) (this)));
if (contentTypeValue == null || contentLength <= 0) {
s2.send();
return null;
}
else {
s2.setHeader("Content-Type", "" + contentTypeValue);
s2.setHeader("Content-Length", "" + contentLength);
outputstream = s2.openContentOutputStream();
return outputstream;
}
}
catch (Exception exception) {
exception.printStackTrace();
return null;
}
}
/**
* getRefresh
*
* @param sipRequest
* @return refresh
*/
private Refresh getRefresh(SipRequest sipRequest) {
for (Enumeration enumeration = m_refreshIDs.elements(); enumeration
.hasMoreElements();) {
Refresh b1 = (Refresh) enumeration.nextElement();
String s1 = b1.m_sipRequest.getHeaderValue("Call-ID");
String s2 = sipRequest.getHeaderValue("Call-ID");
if (s1.equals(((Object) (s2)))) {
String s3 = b1.m_sipRequest.getHeaderValue("Event");
String s4 = sipRequest.getHeaderValue("Event");
if (s3.equals(((Object) (s4)))) {
String s5 = b1.m_sipRequest.getHeaderValue("From");
SipHeader sipheader = new SipHeader("from", s5);
String s6 = sipheader.getParameter("tag");
String s7 = sipRequest.getHeaderValue("To");
SipHeader sipheader1 = new SipHeader("to", s7);
String s8 = sipheader1.getParameter("tag");
if (s6.equals(((Object) (s8)))) {
return b1;
}
}
}
}
return null;
}
/**
* startedRefresh
*
* @param sipRequest
*/
protected void startedRefresh(SipRequest sipRequest) {
Refresh b1;
b1 = getRefresh(sipRequest);
if (b1 == null)
return;
Integer integer;
String s1;
integer = new Integer(b1.m_refreshID);
s1 = sipRequest.getHeaderValue("Subscription-State");
if (s1 == null)
return;
String s3;
SipHeader sipheader = new SipHeader("foo", s1);
String s2 = sipheader.getValue();
if (s2 != null && s2.equals("terminated")) {
if (b1.m_timer != null)
b1.m_timer.cancel();
m_refreshIDs.remove(((Object) (integer)));
refreshListenerCallback(b1, 0, sipheader.getParameter("reason"));
return;
}
if (!s2.equals("active")) {
return;
}
s3 = sipheader.getParameter("expires");
if (s3 == null || s3.equals(""))
return;
try {
int i = Integer.parseInt(s3);
long l = i * 1000 - m_timeout;
Protocol.echo("RefreshHandler.gotNotify(): started refresh "
+ b1.m_refreshID + " expires = " + i + " sec, delay = " + l / 1000L
+ " sec");
ClientTimerTaskImpl a1 = new ClientTimerTaskImpl(b1,
((SipHeader[]) (null)));
synchronized (this) {
if (b1.m_timer != null)
b1.m_timer.cancel();
b1.m_timer = new Timer();
b1.m_timer.schedule(((TimerTask) (a1)), l);
}
}
catch (Exception exception) {
exception.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -