📄 msgstruct.java
字号:
package te2;
import java.lang.*;
import java.io.*;
import java.util.*;
public class MsgStruct
{
public int messageType = 0;
public String messageName = null;
public String from = null;
public String to = null;
public String cSeq = null;
public MsgStruct [] m = new MsgStruct [1000]; //web页面用
public String [] s = new String[1000]; //web页面用
public int objNum = 0;
public String phoneNum = null;
public int DECODE=0;
public int ENCODE=1;
public int ERRCODE=-1;
public int []count = new int [2000];
public long lastsize=0;
public MsgStruct()
{
}
public long getFileLen()
{
File f = new File("/home/Sipserver", "sipserver.log");
long l = f.length();
return l;
}
public void setPhoneNum(String num)
{
if(null != num)
{
phoneNum = num;
}
}
public String readFile()
{
long currentsize = 0;
long size = 0;
String content=null;
currentsize = getFileLen();
size = currentsize - lastsize;
//System.out.println(size);
if(0 == size)
{
System.out.println(size);
return null;
}
else
{
byte[] filebuffer = new byte[(int)size];
try
{
FileInputStream input = new FileInputStream("/home/Sipserver/sipserver.log");
input.skip(lastsize);
input.read(filebuffer);
}
catch(Exception e)
{
System.out.println(e.toString());
}
content = new String(filebuffer);
return content;
}
}
public String searchNum(String str, int index)
{
String sip = "sip:";
String a = "@";
int numBegin = str.indexOf(sip, index) + 4;
int numEnd = str.indexOf(a, numBegin);
char[] buffer = new char[numEnd - numBegin];
str.getChars(numBegin, numEnd, buffer, 0);
String num = new String(buffer);
return num;
}
public String searchIp(String str,int index)
{
String a = "@";
String b = ":";
String c = ">";
String d = ";";
String e = "!";
int Begin = str.indexOf(a,index) + 1;
int End = str.indexOf(e, Begin)+1;
String ipstr=str.substring(Begin,End);
int ipEnd = ipstr.indexOf(b,0);
if(-1 == ipEnd)
{
ipEnd = ipstr.indexOf(c);
if(-1 == ipEnd)
{
ipEnd = ipstr.indexOf(d);
if(-1 == ipEnd)
{
ipEnd = ipstr.indexOf(e);
}
}
}
char[] buffer = new char[ipEnd];
ipstr.getChars(0, ipEnd, buffer, 0);
String ip = new String(buffer);
return ip;
}
public int[] searchIndex()
{
int index1 = 0;
int index2 = 0;
int [] count1 = new int[1000];
int [] count2 = new int[1000];
int i1=0;
int i2=0;
String str=readFile();
if(null == str)
{
return null;
}
else
{
while(str.indexOf("Message decoded",index1)!= ERRCODE)
{
count1[i1] = str.indexOf("Message decoded",index1);
index1 = count1[i1] +20;
i1++;
}
while(str.indexOf("Encoded SIP message",index2)!= ERRCODE)
{
count2[i2] = str.indexOf("Encoded SIP message",index2);
index2 = count2[i2] +20;
i2++;
}
System.arraycopy(count1,0,count2,i2,i1);
java.util.Arrays.sort(count2,0,i1+i2);
return count2;
}
}
public MsgStruct [] getMessageValue(String phoneNumber)
{
int i=0;
int j=0;
if(searchIndex()==null)
{
return null;
}
else
{
count = searchIndex();
while(count[i]!=0)
{
i++;
}
MsgStruct [] logMessage = new MsgStruct[i];
String s = readFile();
while(count[j+1]!=0)
{
String substr = s.substring(count[j],count[++j]);
int fromBegin=0;
int toBegin=0;
int cSeqBegin=substr.indexOf("CSeq:");
if(substr.indexOf("From:")!=ERRCODE)
fromBegin=substr.indexOf("From:");
else if(substr.indexOf("f:")!=ERRCODE)
fromBegin=substr.indexOf("f:");
if(substr.indexOf("To:")!=ERRCODE)
toBegin=substr.indexOf("To:");
else if(substr.indexOf("t:")!=ERRCODE)
toBegin=substr.indexOf("t:");
if (null!=phoneNumber)
{
if ((searchNum(substr,fromBegin).indexOf(phoneNumber)!=ERRCODE)||(searchNum(substr,toBegin).indexOf(phoneNumber)!=ERRCODE))
{
objNum++;
logMessage[objNum-1]=new MsgStruct();
if(substr.indexOf("Message decoded")!=ERRCODE)
{
logMessage[objNum-1].messageType=DECODE;
logMessage[objNum-1].messageName=substr.substring(21,40);
}
else
{
logMessage[objNum-1].messageType=ENCODE;
logMessage[objNum-1].messageName=substr.substring(25,45);
}
logMessage[objNum-1].from=searchNum(substr,fromBegin).concat("@").concat(searchIp(substr,fromBegin));
logMessage[objNum-1].to=searchNum(substr,toBegin).concat("@").concat(searchIp(substr,toBegin));
logMessage[objNum-1].cSeq=substr.substring(cSeqBegin,cSeqBegin+20);
//System.out.println(logMessage[objNum-1].messageType+"\n"+logMessage[objNum-1].messageName+"\n"+logMessage[objNum-1].from+"\n"+logMessage[objNum-1].to+"\n"+logMessage[objNum-1].cSeq);
}
}
}
//System.out.println(objNum);
return logMessage;
}
}
public String [] judgeState(MsgStruct [] logMsg)
{
String [] state = new String[1000];
MsgStruct [] logMessage=logMsg;
int c=0;
int i=0;
while(c<objNum)
{
if((logMessage[c].messageName.indexOf("REGISTER")==ERRCODE)&&(logMessage[c].cSeq.indexOf("REGISTER")==ERRCODE))
{
//System.out.println("access callState procedure!");
if(logMessage[c].messageName.indexOf("INVITE")!=ERRCODE)
{
if(logMessage[c].messageType==DECODE)
{
state[i++]=logMessage[c].from.concat("is calling Phone").concat(logMessage[c].to);
//System.out.println(state[i-1]);
}
}
else if(logMessage[c].messageName.indexOf("SIP/2.0 486")!=ERRCODE)
{
if(logMessage[c].messageType==DECODE)
{
state[i++]=logMessage[c].to.concat("is busy!");
//System.out.println(state[i-1]);
}
}
else if(logMessage[c].messageName.indexOf("SIP/2.0 487")!=ERRCODE)
{
if(logMessage[c].messageType==DECODE)
{
state[i++]=logMessage[c].to.concat("no answer!");
//System.out.println(state[i-1]);
}
}
else if(logMessage[c].messageName.indexOf("SIP/2.0 180")!=ERRCODE)
{
if(logMessage[c].messageType==DECODE)
{
state[i++]=logMessage[c].to.concat("is ringing");
//System.out.println(state[i-1]);
}
}
else if(logMessage[c].messageName.indexOf("SIP/2.0 200")!=ERRCODE)
{
if(logMessage[c].cSeq.indexOf("INVITE")!=ERRCODE)
{
if(logMessage[c].messageType==ENCODE)
{
state[i++]=logMessage[c].to.concat("answer the phone from").concat(logMessage[c].from).concat("and signalling is established!");
//System.out.println(state[i-1]);
}
}
else if((logMessage[c].cSeq.indexOf("BYE")!=ERRCODE)||(logMessage[c].cSeq.indexOf("CANCEL")!=ERRCODE))
{
if(logMessage[c].messageType==ENCODE)
{
state[i++]="back to initiate state!";
//System.out.println(state[i-1]);
}
}
}
else if((logMessage[c].messageName.indexOf("BYE")!=ERRCODE)||(logMessage[c].messageName.indexOf("CANCEL")!=ERRCODE))
{
if(logMessage[c].messageType==DECODE)
{
state[i++]=logMessage[c].from.concat("hang up");
//System.out.println(state[i-1]);
}
}
}
c++;
}
return state;
}
}
/*
class Test
{
public static void main(String args[])
{
MsgStruct o = new MsgStruct();
MsgStruct [] m =new MsgStruct[1000];
m = o.getMessageValue("87541002");
o.judgeState(m);
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -