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

📄 msgstruct.java

📁 在SIP电话系统中
💻 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 + -