Home | History | Annotate | Download | only in extensions
      1 package gov.nist.javax.sip.parser.extensions;
      2 
      3 import gov.nist.javax.sip.header.*;
      4 import gov.nist.javax.sip.header.extensions.*;
      5 import gov.nist.javax.sip.parser.*;
      6 
      7 import java.text.ParseException;
      8 
      9 // Parser for Replaces Header (RFC3891)
     10 // Extension by pmusgrave
     11 //
     12 // Replaces        = "Replaces" HCOLON callid *(SEMI replaces-param)
     13 // replaces-param  = to-tag / from-tag / early-flag / generic-param
     14 // to-tag          = "to-tag" EQUAL token
     15 // from-tag        = "from-tag" EQUAL token
     16 // early-flag      = "early-only"
     17 //
     18 // TODO Should run a test case on early-only
     19 //
     20 
     21 public class ReplacesParser extends ParametersParser {
     22 
     23     /**
     24      * Creates new CallIDParser
     25      * @param callID message to parse
     26      */
     27     public ReplacesParser(String callID) {
     28         super(callID);
     29     }
     30 
     31     /**
     32      * Constructor
     33      * @param lexer Lexer to set
     34      */
     35     protected ReplacesParser(Lexer lexer) {
     36         super(lexer);
     37     }
     38 
     39     /**
     40      * parse the String message
     41      * @return SIPHeader (CallID object)
     42      * @throws ParseException if the message does not respect the spec.
     43      */
     44     public SIPHeader parse() throws ParseException {
     45         if (debug)
     46             dbg_enter("parse");
     47         try {
     48             headerName(TokenTypes.REPLACES_TO);
     49 
     50             Replaces replaces = new Replaces();
     51             this.lexer.SPorHT();
     52             String callId = lexer.byteStringNoSemicolon();
     53             this.lexer.SPorHT();
     54             super.parse(replaces);
     55             replaces.setCallId(callId);
     56             return replaces;
     57         } finally {
     58             if (debug)
     59                 dbg_leave("parse");
     60         }
     61     }
     62 
     63     public static void main(String args[]) throws ParseException {
     64         String to[] =
     65             {   "Replaces: 12345th5z8z\n",
     66                 "Replaces: 12345th5z8z;to-tag=tozght6-45;from-tag=fromzght789-337-2\n",
     67             };
     68 
     69         for (int i = 0; i < to.length; i++) {
     70             ReplacesParser tp = new ReplacesParser(to[i]);
     71             Replaces t = (Replaces) tp.parse();
     72             System.out.println("Parsing => " + to[i]);
     73             System.out.print("encoded = " + t.encode() + "==> ");
     74             System.out.println("callId " + t.getCallId() + " from-tag=" + t.getFromTag()
     75                     + " to-tag=" + t.getToTag()) ;
     76 
     77         }
     78     }
     79 
     80 }
     81