aboutsummaryrefslogtreecommitdiffstats
path: root/lib/diameter
AgeCommit message (Collapse)Author
2013-02-17Add testcases for application_opt() request_errors = answerAnders Svensson
2013-02-17Answer 5xxx errors with application_opt() request_errors = answerAnders Svensson
RFC 3588 allowed only 3xxx result codes in an answer-message (that is, an answer that sets the E-bit) while RFC 6733 also allows 5xxx result codes. Setting request_errors = answer tells diameter to answer 5xxx errors itself. Returning {answer_message, integer()} from a handle_request callback allows both 3xxx and 5xxx result codes to be set. {protocol_error, integer()} is retained for 3xxx result codes.
2013-02-16Comments and minor Result-Code fixAnders Svensson
In particular, don't put an error tuple in the errors field of a #diameter_packet{} when Result-Code and the E-bit are in conflict, put {integer(), #diameter_avp{}}.
2013-02-16Add testcases to 3xxx suiteAnders Svensson
2013-02-16Minor traffic suite fixAnders Svensson
2013-02-16Be less brutal in setting Result-Code/Failed-AVPAnders Svensson
When receiving a request for which errors have been detected during decode, diameter previously used the errors list in the decoded diameter_packet record to unconditionally set Result-Code and Failed-AVP in the outgoing answer. It wasn't particularly delicate in doing so however and would happily set a 5xxx Result-Code even if a handle_request callback returned an answer-message, leading to an encode error. This behaviour became even less endearing as of commit ac452e28, which made it possible to handle_request to take place even for protocol errors. (ie. When a callback typically should return an answer-message.) This commit fixes the behaviour by only setting a value that's appropriate for the answer in question, either a 3xxx or a 5xxx, depending on if the answer's an answer-message or not. It also allows handle_request to prevent diameter from setting anything by setting errors = false in a returned diameter_packet. Ideally it should have been errors = [] but the empty list is the default value for the errors field and changing the default (ideally there shouldn't have been one) would require recompilation of all modules including diameter.hrl: choose the less attractive 'false' to avoid such backwards incompatibility. The request reception is also refactored somewhat to shorten some call chains.
2013-02-16Add 3xxx suite for testing application_opt() request_errorsAnders Svensson
2013-02-16Minor suite simplificationAnders Svensson
2013-02-16Add application_opt() request_errorsAnders Svensson
Configuring the value 'callback' all errors detected in incoming requests to result in a handle_request callback. The default value 'answer_3xxx' is the previous behaviour in which diameter answers protocol errors without a callback.
2013-02-12Merge branch 'anders/diameter/message_length/OTP-10687'Anders Svensson
* anders/diameter/message_length/OTP-10687: Add length suite for testing Message Length errors Fix test/depend.mk blunder Add transport_opt() length_errors Only start a fragment timer when there's something to flush Simplify and document diameter_tcp fragment timer Comment fix Remove upgrade code not needed after application restart
2013-02-12Merge branch 'anders/diameter/rfc6733_dictionaries/OTP-10760'Anders Svensson
* anders/diameter/rfc6733_dictionaries/OTP-10760: Remove trailing whitespace Tweak service interface towards diameter_peer Split message handling in diameter_service into diameter_traffic Simplify request record Move failover out of service process Update traffic suite to test both RFC 3588 and 6733 dictionaries Update capx suite to test both RFC 3588 and 6733 dictionaries Add exprecs '#new-'/1 clause taking list argument Add exprecs '#get-'/1 for transforming records into lists Document the existence of the RFC 6733 dictionaries Don't hardcode common dictionary Add RFC 6733 dictionaries
2013-02-12Merge branch 'anders/diameter/reopen/OTP-10692'Anders Svensson
* anders/diameter/reopen/OTP-10692: Fix testcases in event suite Fix faulty watchdog transition INITIAL -> DOWN Fix faulty watchdog transition DOWN -> INITIAL Comment fixes Rename records peer/conn -> watchdog/peer in diameter_service Add testcases to traffic suite Simplify watchdog transitions in service process Simplify transport shutdown Remove upgrade code not needed after application restart Tweak (make) silent rules support
2013-02-11Add length suite for testing Message Length errorsAnders Svensson
2013-02-11Fix test/depend.mk blunderAnders Svensson
Beam path in dependency was wrong.
2013-02-11Add transport_opt() length_errorsAnders Svensson
The value determines whether or not an unexpected message length in the header of an incoming messages causes the peer process to exit, the message to be discarded or handled as usual. The latter may only be appropriate for message-oriented transport (eg. SCTP) since stream-oriented transport (eg. TCP) may not be able to recover the message boundary once a length error has occurred.
2013-02-10Only start a fragment timer when there's something to flushAnders Svensson
2013-02-10Simplify and document diameter_tcp fragment timerAnders Svensson
Don't start a new timer with each incoming message. Instead, start a timer at timeout and flush after two successive timeouts with no message reception.
2013-02-10Comment fixAnders Svensson
2013-02-10Remove upgrade code not needed after application restartAnders Svensson
Which will be the case in R16B.
2013-02-08Merge branch 'anders/diameter/cover/OTP-10804'Anders Svensson
* anders/diameter/cover/OTP-10804: Update diameter.cover
2013-02-08Remove trailing whitespaceAnders Svensson
2013-02-08Tweak service interface towards diameter_peerAnders Svensson
2013-02-08Split message handling in diameter_service into diameter_trafficAnders Svensson
Traffic handling is connected to the service implementation through the pick_peer callback and failover but diameter_service was getting unwieldy as home to both the service process and traffic handling.
2013-02-08Simplify request recordAnders Svensson
In particular, remove fields containing values that are known (as of the preceding commit) to the request process.
2013-02-08Move failover out of service processAnders Svensson
In order to be able to remove fields from the request process that don't need to be there and do less in the service process. The pick_peer callback now takes place in the request process in the case of immutable state, just as in the case of the initial send.
2013-02-08Update traffic suite to test both RFC 3588 and 6733 dictionariesAnders Svensson
2013-02-08Update capx suite to test both RFC 3588 and 6733 dictionariesAnders Svensson
2013-02-08Add exprecs '#new-'/1 clause taking list argumentAnders Svensson
As an inverse to '#get-'/1 in the preceding commit.
2013-02-08Add exprecs '#get-'/1 for transforming records into listsAnders Svensson
The generated '#get-'/1 has one clause for each exported record r, whose definition is equivalent to the following. '#get-'(#r{} = Rec) -> [r | lists:zip(record_info(r, fields), tl(tuple_to_list(Rec)))]; The record name at the head of the list is the same format that diameter accepts for outgoing message.
2013-02-08Document the existence of the RFC 6733 dictionariesAnders Svensson
2013-02-08Don't hardcode common dictionaryAnders Svensson
Instead, use whatever dictionary a transport has configured as supporting application id 0. This is to support the updated RFC 6733 dictionaries (which bring with them updated records) and also to be able to transparently support any changed semantics (eg. 5xxx in answer-message).
2013-02-08Add RFC 6733 dictionariesAnders Svensson
The RFC 6733 accounting dictionary includes rfc6733 in its name. The RFC 3588 dictionary doesn't and is left as-is for backwards compatibility.
2013-02-08Fix testcases in event suiteAnders Svensson
The transition INITIAL -> DOWN (fixed in the preceding commit) was wrong.
2013-02-08Fix faulty watchdog transition INITIAL -> DOWNAnders Svensson
There is no such transition in RFC 3539, the state remains in INITIAL.
2013-02-08Fix faulty watchdog transition DOWN -> INITIALAnders Svensson
This was the result of the watchdog process exiting as a consequence of peer death in some casesi, causing a restarted transport to enter INITIAL when it should enter REOPEN. The watchdog now remains alive as long as peer shutdown isn't requested and a 'close' message to the service process (instead of watchdog death) generates 'closed' events from the service.
2013-02-08Comment fixesAnders Svensson
2013-02-08Rename records peer/conn -> watchdog/peer in diameter_serviceAnders Svensson
That is, make the naming match that of the corresponding modules. This has long been fairly confusing.
2013-02-08Add testcases to traffic suiteAnders Svensson
That check for unexpected entries in the request table.
2013-02-08Simplify watchdog transitions in service processAnders Svensson
In particular, use watchdog messages as input and do away with the older connection_up/down (and other) messages. Also, only maintain the watchdog state, not the older up/down op state.
2013-02-08Simplify transport shutdownAnders Svensson
Service process informs the watchdog process which informs the peer process. (Instead of going directly to the latter in one case.)
2013-02-08Remove upgrade code not needed after application restartAnders Svensson
Which will be the case with R16B in this case.
2013-02-08Tweak (make) silent rules supportAnders Svensson
2013-01-29Prepare releaseOTP_R16A_RELEASE_CANDIDATEErlang/OTP
2013-01-25Update copyright yearsBjörn-Egil Dahlberg
2013-01-25Update diameter.coverAnders Svensson
2013-01-23vsn -> 1.4Anders Svensson
2013-01-23Update appupAnders Svensson
2013-01-23Spec fixAnders Svensson
2013-01-23Test makefile tweakAnders Svensson
2013-01-23Warn about applications/capabilities mismatches in docAnders Svensson