Hi Chris,

Do I have to create another account to log in ASF JIRA?  My user id here
cannot log in ASF JIRA.

After looking into the source code, I found that we can add support to
Vendor Specific Optional Parameter
by adding some codes in the AbstractSmppCommand class like below.  Please
correct me if I am wrong.

   @SuppressWarnings("rawtypes")
    protected List<OptionalParameter> createOptionalParameters(Map<String,
String> optinalParamaters) {
        List<OptionalParameter> optParams = new
ArrayList<OptionalParameter>();

        for (Entry<String, String> entry : optinalParamaters.entrySet()) {
            OptionalParameter optParam = null;

            try {

//add a checking to distinguish Vendor Specfic Optional Parameter 
//from other static defined optional parameters

                if
(((String)entry.getKey()).equals.("VENDOR_SPECFIC_OPTIONAL_PARAMETER"){
                     optParam = generateVenderSpecificOptParam(entry) ;
                } else {
                    Tag tag = Tag.valueOf(entry.getKey());
                    Class type = determineTypeClass(tag);

                    if (OctetString.class.equals(type)) {
                      optParam = new
OptionalParameter.OctetString(tag.code(), entry.getValue());
                    } else if (COctetString.class.equals(type)) {
                       optParam = new
OptionalParameter.COctetString(tag.code(), entry.getValue());
                    } else if
(org.jsmpp.bean.OptionalParameter.Byte.class.equals(type)) {
                       optParam = new OptionalParameter.Byte(tag.code(),
Byte.valueOf(entry.getValue()));
                    } else if
(org.jsmpp.bean.OptionalParameter.Int.class.equals(type)) {
                       optParam = new OptionalParameter.Int(tag.code(),
Integer.valueOf(entry.getValue()));
                    } else if
(org.jsmpp.bean.OptionalParameter.Short.class.equals(type)) {
                       optParam = new OptionalParameter.Short(tag.code(),
Short.valueOf(entry.getValue()));
                    } else if
(org.jsmpp.bean.OptionalParameter.Null.class.equals(type)) {
                      optParam = new OptionalParameter.Null(tag);
                    }
                }
                optParams.add(optParam);
            } catch (Exception e) {
                log.info("Couldn't determine optional parameter for key {}
and value {}. Skip this one.", entry.getKey(), entry.getValue());
            }
        }

        return optParams;
    }

/* 
   <p>Since it is vendor specified, so users must have the code and type,
        therefore users should concatenate these information as a string 
        using a separator(":") and pass this in as the Entry's value 
   </p>
   <p>Usage: Entry<String, String>
                  String key must equal "VENDOR_SPECIFIC_OPTIONAL_PARAMETER"
                  String value should be "code:type:param_value"  
*/
    protected OptionalParameter generateVendorSpecificOptParam(Entry<String,
String> entry) 
          throws SecurityException, IllegalArgumentException,
IllegalAccessException{
           
          OptionalParameter optParam = null ;

   //code must be in 4 character and can be parsed into a hex
            String code = entry.getValue().substring(0,4) ;
   //code must fall inside the ranges specified in SMPP 3.4 specification
   //0x1400 - 0x3FFF
            if ( !(code >= 0x1400 or code <= 0x3FFF) 
                 throw new IllegalArgumentException() ; 

  //type must be one of the defined Class and must be in uppercase
 
            int pos2 = entry.getValue().indexOf(':', 5) ;
            String type = entry.getValue().substring(5,pos2-1) ;
            if ( type.equals("OCTETSTRING") ){
               optParam = new OptionalParameter.OctetString(hexcode,
entry.getValue().substring(pos2+1) ;
            }else if (type.equals("COCTETSTRING") ) {
               optParam = new OptionalParameter.COctetString(hexcode,
entry.getValue().substring(pos2+1 );
            }else if(type.equals("BYTE") ){
               optParam = new OptionalParameter.Byte(hexcode,                   
                                                                              
Byte.valueOf(entry.getValue().substring(pos2+1)));
            }else if (type.equals("INT") ){
               optParam = new OptionalParameter.Int(hexcode,
Integer.valueOf(entry.getValue().substring(pos2+1)));
            }else if (type.equals("SHORT") ) {
               optParam = new OptionalParameter.Short(hexcode,
Short.valueOf(entry.getValue().substring(pos2+1)));
            }else if (type.equals("NULL") )
                optParam = new OptionalParameter.Null(tag);
            }else 
                 throw new IllegualArgumentException() ; 
            }

            return optParam ;
      }



--
View this message in context: 
http://camel.465427.n5.nabble.com/How-to-add-Vendor-Specific-Optional-Parameter-in-CamelSmppOptionalParameters-tp5737268p5737427.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to