⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sipnameaddressparser.java

📁 jsr-180 (SIP) 实现源码。可以在真实手机上使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.micromethod.sipstack.ri;

import java.util.Enumeration;
import java.util.Vector;

import com.micromethod.sipstack.i.SipException;

/**
 * SipNameAddressParser
 */
public class SipNameAddressParser {

  public static final short _fldfor = 0;

  public static final short _fldnew = 1;

  public static final short _fldcase = 2;

  public static final short _fldif = 3;

  public static final short _fldtry = 4;

  public static final short a = 5;

  public static final short _fldint = 6;

  public static final short _fldbyte = 7;

  public static final short _flddo = 8;

  /**
   * SipNameAddressParser Constructor
   */
  public SipNameAddressParser() {
  }

  /**
   * parseNameAddress
   * 
   * @param address
   * @param part
   * @return Name-Address
   * @throws SipException
   */
  public static synchronized NameAddress parseNameAddress(String address,
      short part) throws SipException {
    NameAddress l1 = new NameAddress();
    Vector vector = SipHeaderParser.parseString(address.trim());
    short word1 = 0;
    boolean flag = false;
    boolean flag1 = false;
    boolean flag2 = false;
    StringBuffer stringbuffer = new StringBuffer();
    Object obj = null;
    Object obj1 = null;
    short word2 = part;
    for (short word3 = 0; word3 < vector.size(); word3++) {
      Cache o1 = (Cache) vector.elementAt(((int) (word3)));
      label0: switch (word2) {
        case 7: // '\007'
        case 8: // '\b'
        default:
          break;

        case 0: // '\0'
          switch (o1.m_ctrlState) {
            case 7: // '\007'
              l1.m_displayName = o1.m_paragraph;
              break;

            case 1: // '\001'
            case 5: // '\005'
              if (o1.m_paragraph.equals("*")) {
                l1.m_star = "*";
                return l1;
              }
              Cache o2 = (Cache) vector.elementAt(word3 + 1);
              if (o2.m_initial == ':') {
                checkScheme(o1);
                l1.m_scheme = o1.m_paragraph;
                if (stringbuffer.length() > 0) {
                  l1.m_displayName = stringbuffer.toString();
                  stringbuffer.setLength(0);
                }
                word3++;
                word1 = word3;
                word2 = 1;
              }
              else {
                if (stringbuffer.length() > 0)
                  stringbuffer.append(" ");
                stringbuffer.append(o1.m_paragraph);
              }
              break;

            case 2: // '\002'
              if (o1.m_initial == '<')
                flag1 = true;
              else
                error("Unknown scheme '" + stringbuffer + "'");
              break;

            case 3: // '\003'
            case 4: // '\004'
            case 6: // '\006'
            default:
              error("Unknown scheme '" + o1.m_paragraph + "'");
              break;
          }
          break;

        case 1: // '\001'
          switch (o1.m_ctrlState) {
            case 1: // '\001'
            case 3: // '\003'
            case 5: // '\005'
              stringbuffer.append(o1.m_paragraph);
              break label0;

            case 2: // '\002'
              switch (o1.m_initial) {
                case 64: // '@'
                  l1.m_fullName = stringbuffer.toString();
                  stringbuffer.setLength(0);
                  if (l1.m_fullName.length() == 0)
                    error("Empty user name");
                  word2 = 3;
                  break label0;

                case 58: // ':'
                  word2 = 2;
                  break label0;

                case 62: // '>'
                  flag2 = true;
                  if (flag) {
                    word3 = word1;
                    word1 = 0;
                    word2 = 3;
                    break label0;
                  }
                  Cache o5 = (Cache) vector.elementAt(word3 - 1);
                  if (o5.m_ctrlState == 1 || o5.m_ctrlState == 5)
                    l1.m_host = o5.m_paragraph;
                  else
                    error("Illegal host '" + o5.m_paragraph + "'");
                  stringbuffer.setLength(0);
                  word2 = 8;
                  break;

                case 36: // '$'
                case 38: // '&'
                case 43: // '+'
                case 44: // ','
                case 47: // '/'
                case 59: // ';'
                case 61: // '='
                case 63: // '?'
                  flag = true;
                  stringbuffer.append(o1.m_initial);
                  break;

                case 37: // '%'
                case 39: // '\''
                case 40: // '('
                case 41: // ')'
                case 42: // '*'
                case 45: // '-'
                case 46: // '.'
                case 48: // '0'
                case 49: // '1'
                case 50: // '2'
                case 51: // '3'
                case 52: // '4'
                case 53: // '5'
                case 54: // '6'
                case 55: // '7'
                case 56: // '8'
                case 57: // '9'
                case 60: // '<'
                default:
                  error("Illegal character in user info part '" + o1.m_initial
                      + "'");
                  break;
              }
              break label0;

            case 6: // '\006'
              l1.m_host = o1.m_paragraph;
              word2 = 4;
              break label0;

            case -1:
              if (flag) {
                word3 = word1;
                word1 = 0;
                word2 = 3;
                break label0;
              }
              Cache o6 = (Cache) vector.elementAt(word3 - 1);
              if (o6.m_ctrlState == 1 || o6.m_ctrlState == 5)
                l1.m_host = o6.m_paragraph;
              else
                error("Illegal host '" + o6.m_paragraph + "'");
              stringbuffer.setLength(0);
              word2 = 8;
              break;

            case 0: // '\0'
            case 4: // '\004'
            default:
              error("Invalid user name part '" + o1.m_paragraph + "'");
              break;
          }
          break;

        case 2: // '\002'
          switch (o1.m_ctrlState) {
            case 1: // '\001'
            case 3: // '\003'
            case 5: // '\005'
              Cache o3 = (Cache) vector.elementAt(word3 + 1);
              Cache o7 = (Cache) vector.elementAt(word3 - 1);
              if (o3.m_initial == '@') {
                if (o7.m_initial == ':') {
                  l1.m_user = o1.m_paragraph;
                  stringbuffer.append(":");
                  stringbuffer.append(l1.m_user);
                  l1.m_fullName = stringbuffer.toString();
                  stringbuffer.setLength(0);
                  if (l1.m_fullName.length() == 0)
                    error("Empty user name");
                }
                else {
                  error("Wrong user info part '" + o1.m_paragraph + "'");
                }
                word3++;
                word2 = 3;
                break label0;
              }
              Cache o8 = (Cache) vector.elementAt(word3 - 2);
              if (o8.m_ctrlState == 1 || o8.m_ctrlState == 5)
                l1.m_host = o8.m_paragraph;
              else
                error("Illegal host '" + o8.m_paragraph + "'");
              stringbuffer.setLength(0);
              word3--;
              word2 = 4;
              break;

            case -1:
            case 2: // '\002'
              error("Is this useless case in AFTER_NAME_STATE");
              break;

            case 0: // '\0'
            case 4: // '\004'
            default:
              error("Problem in user info part '" + o1.m_paragraph + "'");
              break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -