Comment #3 on issue 205 by [email protected]: CAP - Implement
initialDPGPRS CAP V3 Operation
http://code.google.com/p/jss7/issues/detail?id=205
Hello!
Here is a my comments:
1.
org.mobicents.protocols.ss7.cap.api.service.gprs.primitive.AccessPointName:
and
org.mobicents.protocols.ss7.map.api.service.mobility.subscriberManagement.APN
(from TS 3GPP TS 23.003):
The encoding of the APN shall follow the Name Syntax defined in RFC 2181
[18], RFC 1035 [19] and RFC 1123 [20].
The APN consists of one or more labels. Each label is coded as a one octet
length field followed by that number of
octets coded as 8 bit ASCII characters. Following RFC 1035 [19] the labels
shall consist only of the alphabetic
characters (A-Z and a-z), digits (0-9) and the hyphen (-). Following RFC
1123 [20], the label shall begin and end with
either an alphabetic character or a digit. The case of alphabetic
characters is not significant. The APN is not terminated
by a length byte of zero.
NOTE: A length byte of zero is added by the SGSN/MME at the end of the APN
before interrogating a DNS
server.
For the purpose of presentation, an APN is usually displayed as a string in
which the labels are separated by dots (e.g.
"Label1.Label2.Label3").
May be can create a getter (String getAPN()) amd a constructor with a
parameter (String apn) where apn string=="Label1.Label2.Label3".
2. We need unittests for:
CAMELFCIGPRSBillingChargingCharacteristics, SGSNCapabilities
3. FreeFormatData: do we need to implement this internal structure?
4. ChargingCharacteristics:
for "empty" values for parameters I meant "0" values, not "-1".
because "0" is not possible.
But your chaice is possible, you only should add comments in
ChargingCharacteristics like:
"-1 means an absent value"
5. GPRSCause:
I am little confused here.
A specification says about mapping to GTP cause, GMM cause and SM cause
values.
But I do not undwerstand which values to use.
Can anybody help me?
6. ApplyChargingReportGPRS:
- active [2] BOOLEAN DEFAULT TRUE:
there are two approaches for encoding a parameter when value==TRUE:
a) sending boolean(true)
b) just sending nothing ("nothing" means "TRUE")
You selected the option a). I do not really know which of approaches is
better :(
We can look at live traces to find which method is usually ised.
Another solution is boolean->Boolean replacing. And we can give to a CAP
user an opportunity to select between true and null.
- pay attention to "RETURN RESULT TRUE" in ApplyChargingReportGPRS.
This means that we must implement "empty" (parameterless)
ApplyChargingReportGPRSResponse
(not only ApplyChargingReportGPRSRequest) primitive.
7. EntityReleasedGPRSResponse:
we need to implement it
8. furnishChargingInformationGPRS:
bad implementation, look:
FurnishChargingInformationGPRSArg {PARAMETERS-BOUND : bound} ::=
FCIGPRSBillingChargingCharacteristics{bound}
FCIGPRSBillingChargingCharacteristics {PARAMETERS-BOUND : bound} ::= OCTET
STRING (SIZE(1 .. 160))
(CONSTRAINED BY {-- shall be the result of the BER-encoded value of type -
CAMEL-FCIGPRSBillingChargingCharacteristics {bound}})
So the top level is OCTET STRING, getTag()->Tag.STRING_OCTET,
getIsPrimitive()->true
And the OCTET STRING contains an encoded SEQUENCE