package com.android.mms.dom;
import com.android.mms.transaction.OtaConfigVO;
import android.util.Log;
import java.util.List;
public class OtaNokiaParser extends OtaParser {
private static final String TAG = "OtaNokiaParser";
private OtaConfigVO oc = new OtaConfigVO();
public OtaNokiaParser(byte[] pushDataStream, int mimeType) {
super(pushDataStream, mimeType);
/*
* set the object to parse OTA Nokia data
*/
mParser.setTagTable(0, NOKIA_TAG_TOKENS);
mParser.setTagTable(1, NOKIA_TAG_TOKENS);
mParser.setAttrStartTable(0, NOKIA_ATTRIBUTE_START_TOKENS);
mParser.setAttrStartTable(1, NOKIA_ATTRIBUTE_START_TOKENS);
mParser.setAttrValueTable(0, null);
mParser.setAttrValueTable(1, null);
oc.setValue(OtaConfigVO.APN_TYPE, "default");
}
void elementParser(String tagName) {
int attrCount = mParser.getAttributeCount();
String attrName = null;
String attrValue = null;
if (tagName.equalsIgnoreCase(NOKIA_TAG_TOKENS[0])) {
return;
} else if (tagName.equalsIgnoreCase(NOKIA_TAG_TOKENS[1])) {
if (attrCount >= 1) {
currentTagName = mParser.getAttributeValue(0);
} else {
currentTagName = "";
}
Log.d(LOG_TAG, "type="+mParser.getAttributeValue(0));
if (currentTagName.equals(NOKIA_TAG_TYPE[1]) && attrCount >= 2) {// URL
// homepage
oc.setValue(OtaConfigVO.HOME_PAGE, mParser.getAttributeValue(1));
Log.d(LOG_TAG, "value="+mParser.getAttributeValue(1));
} else if (currentTagName.equals(NOKIA_TAG_TYPE[2]) && attrCount >= 2) {// MMSURL
oc.setValue(OtaConfigVO.MMSC, mParser.getAttributeValue(1));
oc.setValue(OtaConfigVO.APN_TYPE, "mms");
Log.d(LOG_TAG, "value="+mParser.getAttributeValue(1));
} else if (currentTagName.equals(NOKIA_TAG_TYPE[4])) {// BookMark
bmName = "";
bmUrl = "";
bookMarkNum++;
}
} else if (tagName.equalsIgnoreCase(NOKIA_TAG_TOKENS[2])) {
if (attrCount >= 2) {
attrName = mParser.getAttributeValue(0);
attrValue = mParser.getAttributeValue(1);
} else {
return;
}
Log.d(LOG_TAG, " "+attrName + "="+attrValue);
if (currentTagName.equals(NOKIA_TAG_TYPE[0])) {// ADDRESS
if (attrName.equals("PPP_AUTHTYPE")) {
oc.setValue(OtaConfigVO.AUTH_TYPE, attrValue);
} else if (attrName.equals("PPP_AUTHNAME")) {
oc.setValue(OtaConfigVO.USER_NAME, attrValue);
} else if (attrName.equals("PPP_AUTHSECRET")) {
oc.setValue(OtaConfigVO.PWD, attrValue);
} else if (attrName.equals("PROXY")) {
oc.setValue(OtaConfigVO.PROXY, attrValue);
} else if (attrName.equals("PORT")) {
oc.setValue(OtaConfigVO.PORT, attrValue);
} else if (attrName.equals("GPRS_ACCESSPOINTNAME")) {
Log.v(TAG, "APN attrValue=" + attrValue);
oc.setValue(OtaConfigVO.APN, attrValue);
}
} else if (currentTagName.equals(NOKIA_TAG_TYPE[3])) {// NAME
oc.setValue(OtaConfigVO.NAME, attrValue);
} else if (currentTagName.equals(NOKIA_TAG_TYPE[4])) {// BOOKMARK
if ("NAME".equals(attrName)) {
bmName = attrValue;
} else if ("URL".equals(attrName)) {
bmUrl = attrValue;
}
if(!"".equals(bmUrl) && !"".equals(bmName)){
// Nokia browser settings first bookmark is homepage
if (otaMimeType == OTA_NOKIA_DATA1 && bookMarkNum == 1) {
if (oc.getValue(OtaConfigVO.HOME_PAGE) == null) {
oc.setValue(OtaConfigVO.HOME_PAGE, bmUrl);
}
}
// Nokia browser settings other bookmark is bookmark
else if ((otaMimeType == OTA_NOKIA_DATA1 && bookMarkNum > 1)
|| (otaMimeType == OTA_NOKIA_DATA2)) {// Nokia Browser bookmarks
oc.bmList.add(new OtaConfigVO.OtaBookMark(bmName, bmUrl));
} else {
return;
}
}
} else if (currentTagName.equals(NOKIA_TAG_TYPE[5])) {// ID
// do nothing
} else {
Log.i(LOG_TAG, "Unknown tag = " + mParser.getAttributeName(0));
}
Log.i(LOG_TAG, "attrName = " + attrName + ", attrValue =" + attrValue);
} else {
Log.i(LOG_TAG, "Unknown tag = " + tagName);
}
}
@Override
public int getParseData(){
if(oc.getValue(OtaConfigVO.NAME)!=null && !oc.getValue(OtaConfigVO.NAME).trim().equals("")){
oc.dataFlag=OtaConfigVO.NOKIA_DATA;
//mms setting
if("mms".equals(oc.getValue(OtaConfigVO.APN_TYPE))){
oc.setValue(OtaConfigVO.MMSC_PROXY, oc.getValue(OtaConfigVO.PROXY));
oc.setValue(OtaConfigVO.MMSC_PORT, oc.getValue(OtaConfigVO.PORT));
oc.setValue(OtaConfigVO.PROXY, "");
oc.setValue(OtaConfigVO.PORT, "");
}
data.add(oc);
}else if(oc.bmList.size()>0){
data.add(oc);
}
return 0;
}
/**
* ****************************************** ****Nokia OTA TOKENS and
* Attributes******* ******************************************
*/
private String bmName="";
private String bmUrl="";
private int bookMarkNum = 0;
/**
* All tokens are defined for code page 0.
*/
private static final String[] NOKIA_TAG_TOKENS = {
"CHARACTERISTIC-LIST", // 0x05
"CHARACTERISTIC", // 0x06
"PARM" // 0x07
};
private static final String[] NOKIA_TAG_TYPE = {
"ADDRESS", "URL", "MMSURL", "NAME", "BOOKMARK", "ID"
};
private static final String[] NOKIA_ATTRIBUTE_START_TOKENS = {
"", // 0x05
"TYPE=ADDRESS", // 0x06
"TYPE=URL", // 0x07
"TYPE=NAME", // 0x08
"", // 0x09
"", // 0x0A
"", // 0x0B
"", // 0x0C
"", // 0x0D
"", // 0x0E
"", // 0x0F
"NAME", // 0x10
"VALUE", // 0x11
"NAME=BEARER", // 0x12
"name=PROXY", // 0x13
"name=PORT", // 0x14
"name=NAME", // 0x15
"name=PROXY_TYPE", // 0x16
"name=URL", // 0x17
"name=PROXY_AUTHNAME", // 0x18
"name=PROXY_AUTHSECRET", // 0x19
"name=SMS_SMSC_ADDRESS", // 0x1A
"name=USSD_SERVICE_CODE", // 0x1B
"name=GPRS_ACCESSPOINTNAME", // 0x1C
"name=PPP_LOGINTYPE", // 0x1D
"name=PROXY_LOGINTYPE", // 0x1E
"", // 0x1F
"", // 0x20
"name=CSD_DIALSTRING", // 0x21
"name=PPP_AUTHTYPE", // 0x22
"name=PPP_AUTHNAME", // 0x23
"name=PPP_AUTHSECRET", // 0x24
"", // 0x25
"", // 0x26
"", // 0x27
"name=CSD_CALLTYPE", // 0x28
"name=CSD_CALLSPEED", // 0x29
"", // 0x2a
"", // 0x2b
"", // 0x2c
"", // 0x2d
"", // 0x2e
"", // 0x2f
"", // 0x30
"", // 0x31
"", // 0x32
"", // 0x33
"", // 0x34
"", // 0x35
"", // 0x36
"", // 0x37
"", // 0x38
"", // 0x39
"", // 0x3a
"", // 0x3b
"", // 0x3c
"", // 0x3d
"", // 0x3e
"", // 0x3f
"", // 0x40
"", // 0x41
"", // 0x42
"", // 0x43
"", // 0x44
"value=GSM/CSD", // 0x45
"value=GSM/SMS", // 0x46
"value=GSM/USSD", // 0x47
"value=IS-136/CSD", // 0x48
"value=GPRS", // 0x49
"", // 0x4a
"", // 0x4b
"", // 0x4c
"", // 0x4d
"", // 0x4e
"", // 0x4f
"", // 0x50
"", // 0x51
"", // 0x52
"", // 0x53
"", // 0x54
"", // 0x55
"", // 0x56
"", // 0x57
"", // 0x58
"", // 0x59
"", // 0x5a
"", // 0x5b
"", // 0x5c
"", // 0x5d
"", // 0x5e
"", // 0x5f
"value=9200", // 0x60
"value=9201", // 0x61
"value=9202", // 0x62
"value=9203", // 0x63
"value=AUTOMATIC", // 0x64
"value=MANUAL", // 0x65
"", // 0x66
"", // 0x67
"", // 0x68
"", // 0x69
"value=AUTO", // 0x6A
"value=9600", // 0x6B
"value=14400", // 0x6C
"value=19200", // 0x6D
"value=28800", // 0x6E
"value=38400", // 0x6F
"value=PAP", // 0x70
"value=CHAP", // 0x71
"value=ANALOGUE", // 0x72
"value=ISDN", // 0x73
"value=43200", // 0x74
"value=57600", // 0x75
"value=MSISDN_NO", // 0x76
"value=IPV4", // 0x77
"value=MS_CHAP", // 0x78
"", // 0x79
"", // 0x7a
"", // 0x7b
"TYPE=MMSURL", // 0x7C
"TYPE=ID", // 0x7D
"NAME=ISP_NAME", // 0x7E
"TYPE=BOOKMARK" // 0x7F
};
}