Revision: bfa75fb11ad1
Author: unknown <yulian@Venera.(none)>
Date: Mon Dec 10 15:44:18 2012
Log: Optimized mgcp client stack
http://code.google.com/p/mediaserver/source/detail?r=bfa75fb11ad1
Modified:
/client/jsr-309/tck/server.log
/client/mgcp/driver/src/main/java/org/mobicents/protocols/mgcp/parser/MgcpMessageParser.java
/client/mgcp/driver/src/main/java/org/mobicents/protocols/mgcp/parser/Utils.java
/media-server-docs/sources-mobicents/src/main/resources/META-INF/MANIFEST.MF
/media-server-docs/sources-mobicents/src/main/resources/META-INF/maven/org.mobicents.media.docs/mobicents-mms-docs-sources/pom.properties
=======================================
--- /client/jsr-309/tck/server.log Sat Dec 8 15:29:16 2012
+++ /client/jsr-309/tck/server.log Mon Dec 10 15:44:18 2012
@@ -1,6 +1,6 @@
-2012-12-08 22:09:14,323 DEBUG [TestBase] (main) Loading
file:/opt/mobsource/medianew/client/jsr-309/tck/exclude-list.properties
-2012-12-08 22:09:14,325 INFO [Runner] (main) Start
mandatory.functional.mediagroup.PlayerTest.test_2_1_1_1_Play
javadoc::Joinable::1 javadoc::MediaGroup::1 javadoc::MediaGroup::6
javadoc::Player::1 javadoc::PlayerEvent::15
-2012-12-08 22:09:14,325 DEBUG [TestBase] (main) Getting a MsControlFactory
instance
-2012-12-08 22:09:14,347 INFO [DriverImpl] (main) Initializing MGCP on
/127.0.0.1:2729
-2012-12-08 22:09:14,360 WARN [JainMgcpStackImpl] (main) Failed to locate
properties file, using default values
-2012-12-08 22:09:14,370 INFO [JainMgcpStackImpl] (main) Jain Mgcp stack
bound to IP /127.0.0.1 and UDP port 2729
+2012-12-11 00:49:12,933 DEBUG [TestBase] (main) Loading
file:/opt/mobsource/medianew/client/jsr-309/tck/exclude-list.properties
+2012-12-11 00:49:12,934 INFO [Runner] (main) Start
mandatory.functional.mediagroup.PlayerTest.test_2_1_1_1_Play
javadoc::Joinable::1 javadoc::MediaGroup::1 javadoc::MediaGroup::6
javadoc::Player::1 javadoc::PlayerEvent::15
+2012-12-11 00:49:12,935 DEBUG [TestBase] (main) Getting a MsControlFactory
instance
+2012-12-11 00:49:12,956 INFO [DriverImpl] (main) Initializing MGCP on
/127.0.0.1:2729
+2012-12-11 00:49:12,969 WARN [JainMgcpStackImpl] (main) Failed to locate
properties file, using default values
+2012-12-11 00:49:12,979 INFO [JainMgcpStackImpl] (main) Jain Mgcp stack
bound to IP /127.0.0.1 and UDP port 2729
=======================================
---
/client/mgcp/driver/src/main/java/org/mobicents/protocols/mgcp/parser/MgcpMessageParser.java
Sat Sep 15 16:38:09 2012
+++
/client/mgcp/driver/src/main/java/org/mobicents/protocols/mgcp/parser/MgcpMessageParser.java
Mon Dec 10 15:44:18 2012
@@ -49,14 +49,13 @@
/**
* Provides processing of the MGCP message.
*
- * @author Oleg Kulikov
- * @author Pavel Mitrenko
+ * @author Yulian Oifa
*/
public class MgcpMessageParser {
private MgcpContentHandler contentHandler;
private static final Logger logger =
Logger.getLogger(MgcpMessageParser.class);
-
+ private long totalTime=0;
/** Creates a new instance of MgcpMessageParser */
public MgcpMessageParser(MgcpContentHandler contentHandler) {
if (contentHandler == null) {
@@ -66,60 +65,221 @@
}
public void parse(String message) throws IOException, ParseException {
- StringReader stringReader = new StringReader(message);
- BufferedReader reader = new BufferedReader(stringReader);
-
- String header = reader.readLine();
-
-// if (logger.isDebugEnabled()) {
-// logger.debug("Read header: " + header);
-// }
- contentHandler.header(header);
+ int currIndex=0;
+ ParamLineValue paramOutput=new ParamLineValue();
+ LineValue output=new LineValue();
+ readLineWithTrim(message,currIndex,output);
+ String header=output.output;
+ currIndex=output.newIndex;
+ contentHandler.header(header);
- boolean sdpPresent = false;
- String line = null;
-
- while ((line = reader.readLine()) != null) {
- line = line.trim();
-// if (logger.isDebugEnabled()) {
-// logger.debug("Read line: " + line);
-// }
-
- sdpPresent = line.length() == 0;
+ boolean sdpPresent = false;
+ String line=null;
+ while (currIndex<message.length()) {
+ readParamLineWithTrim(message,currIndex,paramOutput);
+ currIndex=paramOutput.newIndex;
+
+ sdpPresent = (paramOutput.name==null ||
paramOutput.name.length()==0);
if (sdpPresent) break;
- int pos = line.indexOf(':');
-
- if (pos < 0) {
+ if (paramOutput.value==null) {
logger.warn("Unrecognized parameter: " + line);
continue;
}
-
-
- String parmName = line.substring(0, pos).trim();
- String parmValue = line.substring(pos + 1).trim();
-
- contentHandler.param(parmName, parmValue);
+
+ contentHandler.param(paramOutput.name, paramOutput.value);
}
- boolean hasMore = false;
- String ss = null;
- try {
- ss = reader.readLine();
- } catch (IOException e) {
-
- }
- hasMore = ss != null;
-
- if (sdpPresent || hasMore) {
- String sdp = ss + "\n";
- while ((line = reader.readLine()) != null) {
- sdp = sdp + line.trim() + "\r\n";
+ if(sdpPresent)
+ {
+ long startTime=System.nanoTime();
+ StringBuilder sdp=new StringBuilder();
+ while (currIndex<message.length()) {
+ readLineWithTrim(message,currIndex,output);
+ line=output.output;
+ currIndex=output.newIndex;
+ sdp.append(line);
+ }
+
+ if (logger.isDebugEnabled()) {
+ logger.debug("Read session description: " +
sdp.toString());
}
- if (logger.isDebugEnabled()) {
- logger.debug("Read session description: " + sdp);
- }
- contentHandler.sessionDescription(sdp);
+
+ contentHandler.sessionDescription(sdp.toString());
}
}
+
+ private void readParamLineWithTrim(String source,int
startIndex,ParamLineValue result)
+ {
+ result.name=null;
+ result.value=null;
+ char currChar;
+ int i=startIndex;
+ for(;i<source.length();i++)
+ {
+ currChar=source.charAt(i);
+ if(currChar!=' ' && currChar!='\t')
+ break;
+
+ startIndex++;
+ }
+
+ int endIndex=i;
+ for(;i<source.length();i++)
+ {
+ currChar=source.charAt(i);
+ if(currChar==':')
+ {
+ i++;
+ break;
+ }
+
+ switch(currChar)
+ {
+ case ' ':
+ case '\t':
+ break;
+ case '\n':
+
result.name=source.substring(startIndex,endIndex);
+ result.newIndex=i+1;
+ return;
+ case '\r':
+
result.name=source.substring(startIndex,endIndex);
+ if(source.length()>i+1 &&
source.charAt(i+1)=='\n')
+ result.newIndex=i+1;
+ else
+ result.newIndex=i+2;
+ return;
+ default:
+ endIndex=i+1;
+ break;
+ }
+ }
+
+ if(i==source.length())
+ {
+ result.name=source.substring(startIndex);
+ result.newIndex=source.length();
+ return;
+ }
+ else
+ result.name=source.substring(startIndex,endIndex);
+
+ startIndex=i;
+ for(;i<source.length();i++)
+ {
+ currChar=source.charAt(i);
+ if(currChar!=' ' && currChar!='\t')
+ break;
+
+ startIndex++;
+ }
+
+ endIndex=i;
+ for(;i<source.length();i++)
+ {
+ currChar=source.charAt(i);
+ switch(currChar)
+ {
+ case ' ':
+ case '\t':
+ break;
+ case '\n':
+
result.value=source.substring(startIndex,endIndex);
+ result.newIndex=i+1;
+ return;
+ case '\r':
+
result.value=source.substring(startIndex,endIndex);
+ if(source.length()>i+1 &&
source.charAt(i+1)=='\n')
+ result.newIndex=i+1;
+ else
+ result.newIndex=i+2;
+ return;
+ default:
+ endIndex=i+1;
+ break;
+ }
+ }
+
+ if(result.name==null)
+ {
+ if(endIndex==source.length())
+ result.name=source.substring(startIndex);
+ else
+
result.name=source.substring(startIndex,endIndex);
+ }
+ else
+ {
+ if(endIndex==source.length())
+ result.value=source.substring(startIndex);
+ else
+ result.value=source.substring(startIndex,endIndex);
+ }
+
+ result.newIndex=source.length();
+ }
+
+ private void readLineWithTrim(String source,int startIndex,LineValue
result)
+ {
+ char currChar;
+ int i=startIndex;
+ for(;i<source.length();i++)
+ {
+ currChar=source.charAt(i);
+ if(currChar!=' ' && currChar!='\t')
+ break;
+
+ startIndex++;
+ }
+
+ int endIndex=i;
+ for(;i<source.length();i++)
+ {
+ currChar=source.charAt(i);
+ switch(currChar)
+ {
+ case ':':
+
+ break;
+ case ' ':
+ case '\t':
+ break;
+ case '\n':
+
result.output=source.substring(startIndex,endIndex);
+ result.newIndex=i+1;
+ return;
+ case '\r':
+
result.output=source.substring(startIndex,endIndex);
+ if(source.length()>i+1 &&
source.charAt(i+1)=='\n')
+ result.newIndex=i+1;
+ else
+ result.newIndex=i+2;
+
+ return;
+ default:
+ endIndex=i+1;
+ break;
+ }
+ }
+
+ if(endIndex==source.length())
+ result.output=source.substring(startIndex);
+ else
+ result.output=source.substring(startIndex,endIndex);
+
+ result.newIndex=source.length();
+ }
+
+ private class ParamLineValue
+ {
+ protected int newIndex;
+ protected String name;
+ protected String value;
+ }
+
+ private class LineValue
+ {
+ protected int newIndex;
+ protected String output;
+ }
}
=======================================
---
/client/mgcp/driver/src/main/java/org/mobicents/protocols/mgcp/parser/Utils.java
Sat Sep 15 16:38:09 2012
+++
/client/mgcp/driver/src/main/java/org/mobicents/protocols/mgcp/parser/Utils.java
Mon Dec 10 15:44:18 2012
@@ -79,6 +79,7 @@
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.StringTokenizer;
import org.apache.log4j.Logger;
import org.mobicents.protocols.mgcp.jain.pkg.AUMgcpEvent;
@@ -123,18 +124,33 @@
}
public String[] splitStringBySpace(String value) {
- // return spacePattern.split(value, 0);
- try {
- String[] token = null;
- this.split(' ', value, decdEventName);
- token = new String[decdEventName.size()];
- decdEventName.toArray(token);
- return token;
- } finally {
- decdEventName.clear();
- }
- }
-
+ long startTime=System.nanoTime();
+ decdEventName.clear();
+ int startIndex=0;
+ boolean hasData=false;
+ for(int i=0;i<value.length();i++)
+ if(value.charAt(i)==' ')
+ {
+ if(hasData)
+ {
+
decdEventName.add(value.substring(startIndex,i));
+ startIndex=i+1;
+ hasData=false;
+ }
+ else
+ startIndex++;
+ }
+ else
+ hasData=true;
+
+ if(startIndex<value.length()-1)
+ decdEventName.add(value.substring(startIndex));
+
+ String[] token = new String[decdEventName.size()];
+ decdEventName.toArray(token);
+ return token;
+ }
+
/**
* Create ConnectionMode object from given text value.
*
=======================================
---
/media-server-docs/sources-mobicents/src/main/resources/META-INF/MANIFEST.MF
Sat Dec 8 15:29:16 2012
+++
/media-server-docs/sources-mobicents/src/main/resources/META-INF/MANIFEST.MF
Mon Dec 10 15:44:18 2012
@@ -13,7 +13,7 @@
Bundle-Vendor: TeleStax, Inc.
Implementation-Vendor-Id: TeleStax, Inc.
Bundle-Version: 3.0.0.FINAL
-Bnd-LastModified: 1354997083364
+Bnd-LastModified: 1355177063505
Bundle-ManifestVersion: 2
Bundle-License: http://www.gnu.org/licenses/lgpl-2.1.html
Bundle-Description: Mobicents :: Parent pom for 2.x releases
=======================================
---
/media-server-docs/sources-mobicents/src/main/resources/META-INF/maven/org.mobicents.media.docs/mobicents-mms-docs-sources/pom.properties
Sat Dec 8 15:29:16 2012
+++
/media-server-docs/sources-mobicents/src/main/resources/META-INF/maven/org.mobicents.media.docs/mobicents-mms-docs-sources/pom.properties
Mon Dec 10 15:44:18 2012
@@ -1,5 +1,5 @@
#Generated by Maven
-#Sat Dec 08 22:04:43 IST 2012
+#Tue Dec 11 00:04:23 IST 2012
version=3.0.0.FINAL
groupId=org.mobicents.media.docs
artifactId=mobicents-mms-docs-sources