package com.guo.duoduo.airplayreceiver.rtsp; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RTSPPacket { private String req; private String directory; private String rtspVersion; private String content; private Vector<String> headers; private Vector<String> headerContent; private String rawPacket; public RTSPPacket(String packet) { // Init arrays headers = new Vector<String>(); headerContent = new Vector<String>(); rawPacket = packet; // If packet completed // First line Pattern p = Pattern.compile("^(\\w+)\\W(.+)\\WRTSP/(.+)\r\n"); Matcher m = p.matcher(packet); if (m.find()) { req = m.group(1); directory = m.group(2); rtspVersion = m.group(3); } // Header fields p = Pattern.compile("^([\\w-]+):\\W(.+)\r\n", Pattern.MULTILINE); m = p.matcher(packet); while (m.find()) { headers.add(m.group(1)); headerContent.add(m.group(2)); } // Content if present or null if not p = Pattern.compile("\r\n\r\n(.+)", Pattern.DOTALL); m = p.matcher(packet); if (m.find()) { content = m.group(1).trim(); if (content.length() == 0) { content = null; } } } public String getRawPacket() { return rawPacket; } public String getContent() { return content; } public String getReq() { return req; } public String getVersion() { return rtspVersion; } public String getDirectory() { return directory; } public int getCode() { return 200; } public String valueOfHeader(String headerName) { int i = headers.indexOf(headerName); if (i == -1) { return null; } return headerContent.elementAt(i); } @Override public String toString() { String s = " < " + rawPacket.replaceAll("\r\n", "\r\n < "); return s; } }