📄 registrar.java
字号:
System.out.println ("Registrar, processRegister(), response sent:"); System.out.print(response.toString()); return; } registrationsTable.addRegistration(key,request); Vector contactHeaders=getContactHeaders(key); Response response= messageFactory.createResponse(Response.OK,request); if ( contactHeaders!=null ) { for (int i = 0; i < contactHeaders.size(); i++) { ContactHeader contact = (ContactHeader) contactHeaders.elementAt(i); response.addHeader(contact); } } if (serverTransaction!=null) serverTransaction.sendResponse(response); else sipProvider.sendResponse(response); System.out.println ("Registrar, processRegister(), response sent:"); System.out.print(response.toString()); } } catch(Exception ex) { System.out.println("Registrar, processRegister(), internal error, "+ "exception raised:"); ex.printStackTrace(); } } public static URI getCleanUri(URI uri) { if (uri instanceof SipURI) { SipURI sipURI=(SipURI)uri.clone(); Iterator iterator=sipURI.getParameterNames(); while (iterator!=null && iterator.hasNext()) { String name=(String)iterator.next(); sipURI.removeParameter(name); } return sipURI; } else return uri; } /** The key is built following this rule: * The registrar extracts the address-of-record from the To header * field of the request. The URI * MUST then be converted to a canonical form. To do that, all * URI parameters MUST be removed (including the user-param), and * any escaped characters MUST be converted to their unescaped * form. The result serves as an index into the list of bindings */ public String getKey(Request request) { // Let's see if we already have a binding for this request: try{ ToHeader toHeader=(ToHeader)request.getHeader(ToHeader.NAME); Address address=null; address = toHeader.getAddress(); javax.sip.address.URI cleanedUri; if (address==null) { cleanedUri= getCleanUri(request.getRequestURI()); } else { // We have to build the key, all // URI parameters MUST be removed: cleanedUri = getCleanUri(address.getURI()); } String keyresult=cleanedUri.toString(); return keyresult.toLowerCase(); } catch(Exception ex) { System.out.println("Registrar, hasDomainRegistered(), internal error, "+ "exception raised:"); ex.printStackTrace(); return null; } } public boolean hasRegistration(String key) { return registrationsTable.hasRegistration(key); } public boolean hasRegistration(Request request) { String key = getKey(request); // Order: if user registered, forward to this one; if (hasRegistration(key)) return true; return false; } /* * The result is a list of URI that we kept from a registration related * to the ToHeader URI from this request. */ public Vector getContactsURI(Request request) { try{ String key=getKey(request); Vector contacts=getContactHeaders(key); if (contacts==null) { return null; } Vector results=new Vector(); for (int i=0;i<contacts.size();i++) { ContactHeader contact = (ContactHeader) contacts.elementAt(i); Address address=contact.getAddress(); URI uri=address.getURI(); URI cleanedURI=getCleanUri(uri); results.addElement(cleanedURI); } return results; } catch (Exception ex) { System.out.println ("Registrar, getContactsURI(), internal error, exception raised:"); ex.printStackTrace(); return null; } } public boolean hasContactHeaders(Request request) { ListIterator list=(ListIterator)request.getHeaders(ContactHeader.NAME); return list!=null; } private boolean hasStar(Request request) throws Exception{ ListIterator list=(ListIterator)request.getHeaders(ContactHeader.NAME); if (list==null) return false; while( list.hasNext() ) { ContactHeader contactHeader=(ContactHeader)list.next(); if (contactHeader.getAddress().isWildcard() ) { return true; } } return false; } public boolean hasExpiresZero(Request request) { try{ ExpiresHeader expiresHeader= (ExpiresHeader)request.getHeader(ExpiresHeader.NAME); if (expiresHeader==null) { System.out.println ("Registrar, hasExpiresZero(), the REGISTER does not have an Expires Header"); return false; } else { System.out.println ("Registrar, hasExpiresZero(), the REGISTER has an Expires Header with"+ " expires time:" +expiresHeader.getExpires()); return expiresHeader.getExpires()==0; } } catch(Exception e){ System.out.println ("Registrar, hasExpiresZero(), internal error, exception raised:"); e.printStackTrace(); return false; } } public Vector getContactHeaders(String key) { return registrationsTable.getContactHeaders(key); } public static Vector getContactHeaders(Request request){ Vector contacts =new Vector(); try{ ListIterator list= (ListIterator)request.getHeaders(ContactHeader.NAME); if (list==null) return contacts; while( list.hasNext() ) { ContactHeader contactHeader=(ContactHeader)list.next(); contacts.addElement(contactHeader); } // We will sort out the contacts following the "q" parame ter return contacts; } catch(Exception e){ System.out.println ("Registrar, getContactHeaders(), internal error, exception raised:"); e.printStackTrace(); return contacts; } } protected void printRegistrations(){ registrationsTable.printRegistrations(); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -