r5sdk/r5dev/thirdparty/dirtysdk/changelog.txt
Kawe Mazidjatari b3a68ed095 Add EABase, EAThread and DirtySDK to R5sdk
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
2024-04-05 18:29:03 +02:00

6770 lines
325 KiB
Plaintext

EADP Game Services DirtySDK 15.1.6.0.5 - August 19, 2020
Framework 8.04.04
Android AndroidSDK 100.00.00-pr1
AndroidNDK 15.2.4203891
Capilano CapilanoSDK 180713-proxy
GDK GDK 200602-proxy
Kettle kettlesdk 7.508.021-proxy
PlayStation4AppContentEx 7.008.001
PlayStation4AudioInEx 7.008.001
PS5 ps5sdk 1.00.00.40-proxy
NX nx_config 1.00.05
nxsdk 9.0.0
Linux/Unix UnixClang 4.0.1
Stadia StadiaSDK 1.48-proxy
Win32 WindowsSDK 10.0.19041
New in this release:
DirtySDK (All)
DirtyNet
Added new SocketPacketQueueAdd2() which has a new bPartialAllowed parameter allowing for enqueueing of only
a portion of the submitted packet. (Only used from dirtynetnx for now)
Added new SocketPacketQueueGetHead() that can be used to get the data associated with the queue head,
without consuming the head and dequeueing it.
Added new SocketPacketQueueTouchHead() that can be used to update queue's head entry such that it no longer
includes successfully consumed portion of data previously queried with SocketPacketQueueGetHead().
ProtoSSL
Added the ability to set async receive on the SSL socket.
DirtySDK (GDK)
NetConnGDK
Added sandbox mapping for CERT.DEBUG to CERT environment which is used by MS internally when debugging
issues.
DirtySDK (GDK, XboxOne)
VoipHeadsetXboxOne
Added the ability to query the local user's STT preference from the system.
DirtySDK (NX)
DirtyNetNX
Added send queue and send thread for offloading send operations from main thread. (socket send system call
proved to block unreasonably long even with non-blocking sockets) - feature disabled by default
Added new 'asnd' global control selector that can be used to enable async send globally or on a per-socket
basis.
NetConnNX
Added new '-asyncsend' netconn startup param to turn on socket creation defaulting to async send being
used
Added new '-silent' to disable the display of any first party dialog as a result of handling network request
errors.
DirtySDK (PS4)
DirtyWebApiPS4
Added DirtyWebApiUpdate and 'auto' selector to control where the updating of dirtywebapi happens from.
Added support for queueing event callbacks when the 'qcal' control is set to true.
DirtySDK (PS5)
DirtyWebApi2PS5
Added DirtyWebApiUpdate and 'auto' selector to control where the updating of dirtywebapi happens from.
Added support for queueing event callbacks when the 'qcal' control is set to true.
NetConnPS5
Added ability to query play-first trial status via 'pftr' status selector.
UserApiPS5/UserListApiPS5
Added rich presence support. On PS5 rich presence returns the most recent unhidden activity record.
* The activity name is returned in strData. For other field it is up to the game parse the raw json.
DirtySDK (XboxOne)
NetConnXboxOne
Added sandbox mapping for CERT.DEBUG to CERT environment which is used by MS internally when debugging
issues.
Changes in this release:
DirtySDK (All)
DirtyNet
Fixed issues with using async receive on our TCP sockets by making several adjustments to our behavior.
The error conversion we were doing in SocketRecvfrom treated all zero error codes as a closed socket. To address this we
simplified the error conversion by changing the error codes when there is no data in the packet queue to fake the codes
the platform socket API would return. For UDP sockets we don't handle errors in the socket receive thread, which
doesn't work well for TCP sockets. To address this we only added open sockets to the poll list for TCP and other socket
types are unchanged. There is a race condition that is created by using the socket recv thread due to the use of the
'stat' selector. Due to the socket recv thread already handling these cases we just disable the portion of the 'stat'
selector when async receive is enabled.
DirtySDK (GDK)
Build
Updated to add the dependencies into the modules with in GDK package that give access to the GDK extensions.
ProtoHttpGDK
Fixed issue getting PROTOHTTP_RECVDONE from ProtoHttpRecv when passing in iBufMax = 0 by not early returning
if SocketRateThrottle returns zero.
Changed the setting of the init flags for winhttp to be a global control selector instead of setting it
based on if we are in a debug build or not.
Fixed state transition when calling WinHttpSendRequest by making state transition before the call in case
send completes (on a different thread) before the end of the call.
UserListApiGDK
Fixed issue with identifying response from the DATA callback for mute and block list queries by adding in
the type and user index into the data.
Fixed the xuid passed into the fill out profile function which was using the first index into the array
instead of the current index due to a typo.
DirtySDK (PC, XboxOne, GDK)
DirtyNetWin
Removed the direct recv from the socket when there is no data in the packet queue. In an attempt to align
the implementations of dirtynet, we will remove our attempted optimization in dirtynetwin.
DirtySDK (PS4, PS5)
NetConnPS4, NetConnPS5
Fixed an incorrect debug print statement that indicated failure to acquire PPPoE information when 'type'
status selector is used.
VoipHeadsetPS4
Changed the block list interval down to the same value we are using on stadia to try to keep the
implementations aligned.
DirtySDK (PS5)
NetConnPS5
Fixed duplicate NP platform termination on shutdown.
UserListApiPS5
Fixed problems with querying profiles of 100 friends (up to the page limit)
DirtySDK (Stadia)
UserListApiStadia
Fixed issue with identifying response from the DATA callback for mute and block list queries by adding in
the type and user index into the data.
VoipHeadsetStadia
Fixed the inability to get the hardware status by calling the status callback when we get state changes.
Using GgpAddMicAudioStateChangedHandler allows us to get the state changes of the microphone state. When the
microphone is not available for use we must convey the mute. DirtySDK already has an API to do this but we
weren't sending the right callbacks down to signal the changes.
DirtySDK (XboxOne)
VoipNarrateXboxOne
Changed the implementation to add exception handling to the speech api and prevent multiple asynchronous
reads at once.
EADP Game Services DirtySDK 15.1.6.0.4 - June 3, 2020
Framework 8.04.00
Android AndroidSDK 100.00.00-pr1
AndroidNDK 15.2.4203891
Capilano CapilanoSDK 180712-1-proxy
GDK GDK 200200-proxy
Kettle kettlesdk 7.508.001-proxy
PlayStation4AppContentEx 7.008.001
PlayStation4AudioInEx 7.008.001
PS5 ps5sdk 0.95.00.36-proxy
NX nx_config 1.00.05
nxsdk 9.0.0
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Stadia StadiaSDK dev-proxy
Win32 WindowsSDK 10.0.18362
New in this release:
DirtySDK (All)
Base64
Added the ability to remove padding from url encoded via a new API Base64EncodeUrl2. Padding isn't required
by the spec in all cases and with JWT we do not wanted padding added.
DirtySDK (Sony)
VoipHeadsetPS4
Added support for querying the blocklist to auto-mute players on Sony platforms as required by TRC R5304.
DirtySDK (Stadia)
NetConnStadia
Added support for the 'chat' selector to check if the local user can use voice chat. This selector will be
used by the voip system like on other platforms to restrict voice chat.
PrivilegeApiStadia
Added support for checking the voice chat and multiplayer features on stadia allowing for showing the
overlay if necessary.
VoipHeadsetStadia
Added support for processing the blocklist to auto-mute players. Added tracking for the remote player ids
which is needed for processing the blocklist.
Added the checking of the voice chat restrictions for the transmission and playback of voice chat.
Added support for transcription and text chat accessibility features. This implementation is based on PS4
where we disable 'vdis' for transcription when narration is active. Like on other platforms we provide the
text chat narration features as a way to allow teams to use our voip features for text chat when voice chat
is inactive.
Added support for text-to-speech using the cloud based providers via voipnarrate. The narration module
supports a sample rate that differs of that in module. This is handled transparently in the codec (via
resampling) but we need to handle the data coming in with the differing sample rate.
VoipStadia
Added proper support for local input muting. We had preliminary for the local input muting in the voip
module but it was not implemented in the headset module.
Changes in this release:
DirtySDK (All)
DirtyNet
Removed the suppressions around the include of winsock2.h in dirtynet.h to fix issues with all warnings
being suppressed for complation units that include this header file. In previous versions of the WindowsSDK
these suppressions were needed due to warnings being generated by the header file. We no longer see this
behavior on current versions of the WindowSDK.
NetConn
Increased the number of idle handlers to 64 due to game team use cases where more than 32 need to be
registered. The number of idle handlers should not be the limiting factor to the amount of modules we can
have running at once.
QosClient
Changed the NetCritEnter to NetCritTry to prevent stalling the main thread waiting for the lock. If we can't
the lock then we can wait for the next frame to do the update.
VoipHeadset
Changed the headset modules to unify on how they detect a change in the first party mute list uisng the
'fpmu' selector. Previously on xbox we were using the 'fpmc' selector that returns the number of entries in
the first party mute list. Given that certain implementations could make multiple updates in an interval
that could mean no change in the count, we needed to use a different method. The new method will signal if
an update was made to the list which we signal in the places when we know a change has been made.
VoipNarrate
Updated the module to expose the sample rate that it uses internally. On system's with differing sample
rates it allows us to resample where necessary at the codec level.
VoipOpus
Refactored the resampler logic to prevent reallocation when switching sampling rate and update the
calculation the sample rate based on input samples. On Stadia when communicating without accessibility we
will be using a sample rate of 48kHz, our accessibility modules depend on 16kHz which we need to resample in
order to support. Given that we might switch the sampling rate we don't want to reallocate the same state
thus we will just remember what sampling rate the resampler is configured to.
UserList
Increased the size of the gamertag field to support the increases in the gdk and stadia gamertags.
DirtySDK (GDK)
NetConnGDK
Changed the implementation of the environment determination to default to production on cases where the
sandbox lookup failed or a valid mapping was not found. In these cases we want to ensure that the default
case of running in production still functions. If we would fall into these cases before these changes we
would be stuck in the environment determination state until the user tried to reconnect to the platform
network again.
UserListApiGDK
Fixed a build error UserListApiGDK. We now also include userlistapixboxone.h in userlistapi.h.
This matches what was done for userapi.h and fixes compliation issues.
DirtySDK (NX)
NetConnNX
Added 'eusr' selector support on NX. This selector returns the IEAUser interface given a user index.
DirtySDK (PS4)
DirtySessionManagerPS4
Removed Play together feature because it is not officially deprecated. All the assciated functionality will
only be avaliable if you are using SDK version lower than 7.5 SDK
NetConnPS4
Changed NetConnStartup to update the title id if it is called while the module is already started and
title id is NETCONNPS4_SAMPLE_TITLE_ID. This will allow the title id to be updated to the game title id
for cases where NetConnStartup is called early for BugSentry and NETCONNPS4_SAMPLE_TITLE_ID is used as
a default.
DirtySDK (PS5)
DirtyWebApi2PS5
Changed the way how DirtyWebApi callback is called when we encounter sce errors. The http status code is now also
supplied along with the sce error to help differentiate potential buffer size errors.
Fixed the unintended knock on of sharing dirtywebapi2. When modules sharing dirtywebapi2 they should only be allowed to
abort the requests made by themselves.
NetConnPS5
Changed NetConnStartup to update title id if it is called while the module is already started and
title id is NETCONNPS4_SAMPLE_TITLE_ID. This will allow the title id to be updated to the game title id
for cases where NetConnStartup is called early for BugSentry and NETCONNPS4_SAMPLE_TITLE_ID is used as
a default.
UserListApiPS5
Fixed Total item friends count not being set for a list end event.
Fixed callbacks not firing when using type mask with a user without friends. It will now also fire the callback if
the get account ids request returns zero items.
Removed an unecessary NetCritLeave in _UserListApiProcessRequest (). This extra NetCritLeave was causing strange
deadlocks because unlocking an unlocked mutex is undefined behavior.
Changed the restriction on the max blocked list size limit to 2000 per request (this is the max number supported by PSN).
Querying Blocked List with filters or mask parameter are also not supported.
Fixed the _UserListApiAddQueryParamsToRequest() function to ignore adding query parameters for blocked list reqauest
instead of the friends request.
DirtySDK (Sony)
VoipHeadsetPS4
Removed the uChatPrivileges field as it is no longer read out of due to changes in CL1329299.
DirtySDK (Stadia)
NetConnStadia
Changed the 'tick' selector to support retrieveing the raw JWT. Retrieving the JWT was missed during the
initial implementation of JWT support on stadia. This aligns with how the other platforms support retrieving
the JWT.
Voip
Enabled the speaker callback on stadia. We are following the PC implementation and this was already
supported at the headset level.
VoipHeadsetStadia
Fixed VoipHeadsetControl to return -1 when unhandled.
VoipStadia
Fixed a bug in that the correct user indices were not being passed to apply the mute on.
DirtySDK (XboxOne)
NetConnXboxOne
Fixed for uncaught exception during environment determination when the TMS class is not enabled in the
appxmanifest. If the application was not setup to include the ability to access title storage an exception
will be thrown when we try to create that class. In this case we will catch the exception and default to the
production environment.
EADP Game Services DirtySDK 15.1.6.0.3 - April 21, 2020
Framework 8.03.02
Android AndroidSDK 100.00.00-pr1
AndroidNDK 15.2.4203891
android_config 5.00.00-pr1
Capilano CapilanoSDK 180712-1-proxy
GDK GDK 200200-proxy
Kettle kettlesdk 7.008.001-proxy
PlayStation4AppContentEx 6.508.010
PlayStation4AudioInEx 6.508.001
PS5 ps5sdk 0.95.00.36-proxy
NX nx_config 1.00.05
nxsdk 9.0.0
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Stadia StadiaSDK dev-proxy
Win32 WindowsSDK 10.0.18362
*** Important - First release supporting Stadia ***
This is the first DirtySDK release that supports Stadia. Most but not all functionality is supported.
For more detailed information please please contact Gameplay Services.
New in this release:
DirtySDK (All)
DirtyGIF, DirtyGraph
Added support for multiframe GIF decoding. Frames may be decoded all at once or one at a time.
DirtyUser
Added a generic dirtyuser based on uint64_t identifiers and switched all our platforms to using it. Given
that all our platforms use uint64_t ids there is no reason to require the creation of a platform specific
version that is exactly the same.
ProtoHttp
Added a new error PROTOHTTP_EAGAIN to be used when we cannot make the request because a resource is not
available or not ready to be used.
ProtoSSL
Added a public API function to expose the pkcs1 verify features internal to protossl. This functionality
will allow us to verify the RSA signatures when used for cryptographic operations outside the context of a
TLS connection.
Added a public function to generate a PKCSv1.5 signature.
DirtySDK (PS5)
UserApiPS5, UserListApiPS5
Added PS5 support for UserApi and UserListApi
DirtySDK (Stadia)
NetConnStadia
Added initial support for the stadia platform. Other modules use the unix versions which work out of the
box.
Added a selector 'gpid' to get the player id for the user registered at a given index.
UserApiStadia, UserListApiStadia
Adding support for userapi and userlistapi on the stadia platform. For the profile data, stadia only
supports getting the gamertag and id. For the presence data, stadia only supports getting the availability
of the user.
VoipStadia
Added an implementation of the voip module for stadia. This implementation is generic and inspired from the
other platforms. It will be expected to change when we start implementing the headset functionality.
VoipHeadsetStadia
Added support for the headset module on stadia. Stadia only supports pulling PCM data from the microphone at
48kHz. For other platforms we normally only support 16kHz but we don't have the option to modify this on
stadia. Given that 20ms of audio data at 48kHz exceeds our MTU we must compress the audio. To do this we
have added support for the opus codec which is supported on other supported platforms. Opus is configured to
use 16kHz by default but for stadia we have modified the build scripts and source to allow bumping that up
to 48kHz.
Changes in this release:
DirtySDK (All)
Base64
Fixed decoding of non-padded base64. when no padding is present treat the data up to the quad as padded.
NetConn
Fixed the issue of NetConnDisconnect being called while the ref count is not zero.
NetGameDistServ
Moved some metrics sampling interval validation logic to where it belongs, from gameserveroimetrics.c to
netgamedistserv.c
Enhanced debug logging around calculation of idpps, odmpps and inputdrops metrics.
Replaced NetGamDistServT::bPrevFlowEnabled, NetGameDistServT::bPrevNoInputMode and
NetGameDistServT::uPrevStatClientCount with respective local variables in functions where their usage was
limited to. Fixed implementation of NetGameDistControl('rsta') such that it is now limited to reset the
following boolean variables used to flag if events happened during the sampling interval:
NetGameDistServT::bClientCountChanged, NetGameDistServT::bFlowEnabledChanged,
NetGameDistServT::bNoInputModeChanged.
Fixed implementation of 'ocnt' selector to now return 1 if sampling interval is invalid.
Fixed implementation of 'drop' and 'icnt' selector to now return 1 if sampling interval is invalid.
ProtoHttp
Deprecated the PROTOHTTP_NOTHREADS error (used on PS4/PS5) as the PROTOHTTP_EAGAIN can be used instead as a
general purpose error across the platforms.
ProtoSSL
Fixed an issue where a PSS signature scheme could be chosen when sending a CertificateVerify message for a
PKCS1 certificate. This would cause OpenSSL to abort the connection with an illegal parameter alert.
Fixed a possible null-pointer exception by aborting the handshake if we can't find a valid matching
signature scheme in RecvCertificateRequest; this situation could only happen with a non-compliant server.
Fixed SendCertificateRequest() to build the TLS1.2 SignatureAndHashAlgorithms from the available signature
schemes rather than hard-coding a subset of available signature schemes in the function itself.
Removing support for ECDSA-SHA512 as we are not looking to support SECP521R1 curves at this time.
VoipConnection
Changed the initial value (from 127 to 0) of the variable used to track the last received seq number for
reliable data messages on a specific voip connection. The previous value was used to make it clear that
the validity range is limited to [1,127] and that the next expected inbound sequence number at connection
start is 127 + 1 = 1. This had a knock on in a scenario where we need to send a ACK before inbound traffic
would have even been received. That scenario seems only possible in server-based connectivity using
the 1x upload Nx download optimiztion on MIC packets. Upon exercising that race condition, one end of
the connection would ACK seq nb 127 when in reality it has not yet received packet resulting in reliable
data traffic flow being broken. The bug fix consists in initializing the variable with 0 instead resulting
in the next expected inbound sequence number at connection start to be 0 + 1 = 1, and the usage of 0 when
ACKING before traffic comes in, where 0 means 'ignore this field, no sequence number acked'.
DirtySDK (GDK)
ProtoHttpGDK
Fixed the uri truncation by parsing the information directly from the request headers. If you had a uri
longer than 256 characters we would truncate the information causing the formatted request headers to fail
when making the call to WinHttpOpenRequest.
Changed the behavior on gdk to not automatically redirect before providing the caller with the redirection
header information. When redirects are enabled with WinHttp, you never get a chance to inspect the
intermediate header information. Their are certain customers (webkit) that depend on being able to pull out
the location headers before the redirect is complete.
Fixed the corruption of the download payload by only resetting the read and recv positions before doing a
new read. If the caller has read the entire available buffer using ProtoHttpRecv while we have a pending
WinHttpReadData call (due to having some available space in the buffer), our payload may get corrupted. The
iInpOff and iInpLen fields get reset to zero when everything is read in ProtoHttpRecv. This causes the
writes to happen to the wrong location.
Fixed the processing of the redirect from a POST to a GET by making sure the post size is set to zero. In
the GDK version of ProtoHttp to handle the state change to ST_HEAD we wait for all the data to be sent based
on the amount sent and post size.
Fixed redirect issue when we try to receive the body but a redirect happens by not trying to receive body
when redirecting. If we are redirecting we will be create a new request and by trying to receive the body
we put our request tracking in a bad state. We try to receive the response and then put our query async-op
into the pending state. This puts our async-op in a bad state for the next request that happens.
ProtoHttpManager
Fixed requests failing on the GDK platform if pipelining is enabled by disabling this pipelining feature at
the httpmanager level.
DirtySDK (Linux)
DirtyErrUnix
Fixed the parsing of the errorlist not to exit on an error of zero but use the list term as done on other
platforms.
DirtySDK (PC)
DirtyNetWin
Fixed local address resolution when using a full tunnel VPN by using an address in the public space to do
the routing query. With the work from home directive some teams have started trying to use their work PCs
at home using the full tunneled VPN. On the windows version of dirtynet, the local address resolution tries
to use 192.168.1.1 for routing query. On home networks you are likely to pick a 192.168.1.x address which
is the non-VPN adapter's address which will fail to be used for prototunnel connectivity purposes, even
when the connection does not leave the host.
DirtySDK (PS5)
DirtyContextManager
Added the cleanup of Http2 contexts during shutdown
DirtyWebApiPS5
Fixed a merge error. sceNpWebApi2AddHttpRequestHeader should be using the web request id instead.
NetConnPS5
Changed the default behavior of the shared dirtywebapi2ps5 to queue up the callbacks ('qcal' selector)
DirtySDK (XboxOne)
VoipHeadsetXboxOne
Changed _VoipHeadsetAddLocalTalker()/_VoipHeadsetRemoveLocalTalker() to no longer invoke
_VoipHeadsetDumpChatUsers() directly but to now flag a boolean that will result in the users being
dumped from VoipHeadsetProcess() instead. This is to avoid possible concurrent execution of
_VoipHeadsetDumpChatUsers() from the socket recv thread (not locking ThreadCrit) and other threads locking
ThreadCrit, i.e. voip thread and main thread.
EADP Game Services DirtySDK 15.1.6.0.2 - February 14, 2019
Framework 8.02.01
Android AndroidSDK 100.00.00-pr1
AndroidNDK 15.2.4203891
android_config 5.00.00-pr1
Capilano CapilanoSDK 180709-proxy
GDK GSDK 191100-proxy
Kettle kettlesdk 7.008.001-proxy
PlayStation4AppContentEx 6.508.010
PlayStation4AudioInEx 6.508.001
PS5 ps5sdk 0.90.00.24-proxy
NX nx_config 1.00.05
nxsdk 9.0.0
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Win32 WindowsSDK 10.0.18362
*** Important - First Gen5 release supporting PS5 and GDK targets ***
This is the first DirtySDK release that supports Gen5 consoles. Most but not all functionality is supported.
For more detailed information please please contact Gameplay Services.
*** Important - Required framework version updated to 8.x line in support of Gen5 consoles ***
New in this release:
DirtySDK (All)
ConnApi
Added a debugging print to explain that we are connecting in passive mode and a comment explaining what that
is.
NetGameDist
Added support for client side metrics (rpacklost, lpacklost, odpps, idpps, dist wait time, dis proc time)
DirtySDK (GDK)
DirtyErrGDK
Added the WinHttp specific error mappings to the module.
Added the errors from xsapi to the file but given that c++ hardcoded the values.
Added errors that come from winerror that are also used in the xsapi's httpclient.
NetConnGDK
Added support for checking the trial information. In the GDK, the request is always asynchronous and thus
we needed to introduce a control call to kick off the request.
Added protoupnp support, strictly for informational purposes (no adding/removing port mapping as we rely on
Microsoft for that).
Added support for communications check for the 'chat' selector
PrivilegeApiGDK
Added support for privilege checks on the GDK
ProtoHttpGDK
Added support for the WinHttp library backed implementation of ProtoHttp.
Added support for send and recv rate throttles as supported on the socket and other protocols. These
throttles can be queried and controlled via the normal methods ProtoHttpStatus/ProtoHttpControl
respectively.
ProtoUpnp
Added new macro 'dscp' for Gemini use - discovers/describes and finds port mapping but does not attempt to
add/delete one.
Added new status flag PROTOUPNP_STATUS_FNDPORTMAP, used to indicate if a port mapping was found on the
device.
UserApiGDK
Added support for pulling profile(s), presence and rich presence information via the userapi module.
Added support for posting rich presence data.
Added support for specifying the size of the avatar urls based on what we do on xboxone.
UserListApiGDK
Added support for grabbing the social relationships on GDK without pulling any additional information.
Added support for the avoid and mute list APIs. For this support we are treating avoid list as blocking as
the closest thing available on that platform.
Added support for profile, presence and rich presence data lookup as part of the userlist.
Added handling for the rate limiting errors for retry time.
VoipHeadsetXboxOne
Added support for finding the audio endpoint on GDK builds for narration.
VoipNarrateGDK
Added support for using XSpeechSynthesizer for doing local narration on GDK builds.
DirtySDK (PS5)
DirtyWebApiPS5
Added support for NpWebApi2 calls.
DirtySDK (NX)
NetConnNX
Added support for setting the dirtysock thread's affinity using the startup param that is used on other
platforms. The 'affn' selector was also added like on other platforms to query our affinity.
Implemented NetConnQuery based on implementation of other console platforms. Using the information we have
already in the module we can query the index based on nickname, uid or first logged in user.
Changes in this release:
DirtySDK (All)
ConnApi
Fixed crash when the secure address on xboxone within our dirtyaddr is not properly set by checking the
validity of the getaddr call.
CryptRand
Changed the module to use a single cryptrand.c source where possible for our various platforms as the
complexity of the solution was unnecessary.
Changed the definitions of the CryptRandInit and CryptRandShutdown functions to be private
DirtyThread
Fixed race condition crash / assert when the dirtysock core threads shut down by moving the logging before
the shutdown indicator.
ProtoHttp2
Fixed the truncation of the formatted header by ensuring space for the null terminator in our temporary
buffer we use for HPACK compression
ProtoHttpManager
Fixed a crash in a print, because pHttpManager can be null after a disconnect in rare cases.
ProtoHttpServ
Fixed boundary issues with chunk headers and trailers not being fully available when receiving a chunked
transfer.
ProtoSSL
Fixed the behavior of the alerting when no certificate is received and one is required based on what is
specified by the spec.
VoipDef
Added VoipHeadsetPreferredDefaultDeviceTypeE enum for use with VoipHeadsetStatus() control selector 'odft'.
Changed comments to be platform agnostic for VOIP_LOCAL_USER_HEADSETOK, VOIP_LOCAL_USER_INPUTDEVICEOK and
VOIP_LOCAL_USER_OUTPUTDEVICEOK.
VoipCommon
Fixed wrong exit condition for FOR loop that could result in out-of-bound access of
VoipConnectionListT::bTranscribedTextRequested[] array.
VoipTranscribe
Fixed buffer resetting to be more consistently applied.
Fixed an issue where SendFinish could fail to send when using IBM Watson and websockets, which could result
in a session timeout from that transaction as the server waits for the close or trailing silence, neither
of which were being sent, to complete the request.
Fixed some cases that weren't going through ST_FAIL state properly.
Fixed to reset record buffer on fail; this resolves some issues with a request following a failure.
Fixed a rare case where the state machine could be stuck in ST_IDLE permanently.
Fixed STREAM_END for HTTP2 when finishing a submission (Amazon/Google).
DirtySDK (GDK)
DirtyCert
Fixed the port offset to use the correct one on all xbox platforms (xdk/gdk)
ProtoHttpGDK
Fixed incorrect copying of data from ProtoHttpRecvAll after back to back requests by making sure we reset
our state to default.
UserListGDK
Fixed a leak of the xbl context in the case we failed to kick off the async requests.
VoipHeadsetXboxOne
Fixed the setting of the bitrate for gdk based on the documentation.
game_chat_audio_encoding_type_and_bitrate was changed to game_chat_audio_encoding_bitrate on the GDK.
Fixed a bug where the users "text to speech conversion preference" was not being honored.
DirtySDK (GDK, XboxOne)
VoipHeadsetXboxOne
Changed User^ calls to use 'xuid' and 'gtag' for compatibility with both GDK and XDK
Removed the platform check for xboxone for bApplyRelFromMuting check on the voip thread.
VoipXboxOne
Changed User^ calls to use 'xuid' and 'gtag' for compatibility with both GDK and XDK
DirtySDK (NX)
DirtyNetNX
Fixed issues with NetConnStartup failures due no network connection on the switch
NetConnNX
Removed the to do in _NetConnGetPlatformEnvironment(). Note: On NX there is no way for the client to
determine the environment.
DirtySDK (PC)
VoipHeadsetPC
Changed VOIP_HEADSET_MAXDEVICES to 16 and updated some comments to no longer refer to only output
devices.
Changed VoipHeadsetStatus() with control selector 'odft' to take an iValue of enum
VoipHeadsetPreferredDefaultDeviceTypeE for specifying whether to retrieve the default audio device or
the default voice communications device, and whether to set the DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY
flag.
VoipPC
Changed print statements in voip status callback for consistency with changes in other platforms.
DirtySDK (PS4)
DirtyErrPS4
Added more webapi 2 errors specific to PS5.
DirtyWebApiPS4
Added DirtyWebApiRequestEx to allow the addition of request headers
NetConnPS4
Added mapping for CZECH, HUNGARIAN, GREEK, ROMANIAN, THAI, VIETNAMESE and INDONESIAN from sony
SCE_SYSTEM_PARAM_LANG_* to our LOBBYAPI_LANGUAGE_*.
VoipHeadsetPS4
Changed _VoipHeadsetUpdateStatus() to send VOIP_HEADSET_STATUS_INPUT to pStatusCb and changed
headset references to mic in places where only input device was being checked.
VoipPS4
Fixed voip status calback to no longer toggle output device status when an input device is inserted
or removed. Output device status is now set when local talker is registered and is not updated.
DirtySDK (PS5)
NetConnPS5
Added the 'pscx' and 'pscd' status selector to create/return a user's push context id and to delete a users
push context id.
Fixed the gating of the chat restriction, the 'chat' selector returns FALSE when there is no restriction
instead of TRUE.
Added mapping for CZECH, HUNGARIAN, GREEK, ROMANIAN, THAI, VIETNAMESE and INDONESIAN from sony
SCE_SYSTEM_PARAM_LANG_* to our LOBBYAPI_LANGUAGE_*.
VoipOpus
Removed the hacks for building on PS5 for the speex package after we upgraded to the latest version.
DirtySDK (XboxOne)
DirtyAddrXboxOne
Modified the DirtyAddrGetInfoXboxOne to validate that the address has been properly set before trying to
retrieve data.
NetConnXboxOne
Added exception handling when adding a new NetworkStatusChanged event handler
VoipHeadsetXboxOne
Changed _VoipHeadsetUpdateStatus() to send VOIP_HEADSET_STATUS_INPUT to pStatusCb and changed
headset references to mic in places where only input device was being checked.
Changed _VoipHeadsetGetChatUserForVoipUser() to use to_wstring instead of snwprintf
Fixed gamechat 2 audio buffers not being returned when switching between crossplay modes.
Fixed first party mute to ignore adjuster none. Muting due to adjuster none is technically not a result of
first party settings.
Fixed the way how user chat status is being handled for crossplay.
VoipXboxOne
Fixed voip status calback to no longer toggle output device status when an input device is inserted
or removed. Output device status is now set when local talker is registered and is not updated.
EADP Game Services DirtySDK 15.1.6.0.1 - October 9, 2019
EA Config 5.14.04
Framework 7.19.00
Android AndroidSDK 28
AndroidNDK r15c-1
android_config 4.06.01
Capilano CapilanoSDK 180709-proxy
capilano_config 2.07.02
Kettle kettlesdk 6.508.001-proxy
kettle_config 2.11.00
PlayStation4AppContentEx 6.508.010
PlayStation4AudioInEx 6.508.001
NX nx_config 1.00.05
nxsdk 9.0.0
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Win32 DotNet 4.0-2
DotNetSDK 2.0-4
VisualStudio 15.4.27004.2002-2-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
DirtyPNG
Added paletted png decode support.
NetGameDist
Added new status selector 'drop' to return the total dropped packets
NetGameDistServ
Added a new NetGameDistServStatus2() function that takes more parameters.
Added 4 new status selector for reporting stats
'clnu': number of clients
'drop': total dropped input packet count
'idps': total input dist packet count
'odmp': total output dist multi packet count
Added new control selector 'rsta' to reset stat variables
ProtoSSL
Added new ECDSA Gameplay Services Root CA for future use.
VoipNarrate
Added VoipNarrateControl('ctsm') to clear text to speech metrics in VoipTextToSpeechMetricsT
This is used in a fix where incorrect tts metrics may be reported, to make use of this fix update BlazeSDK
to trama.1.
VoipTranscribe
Added VoipTranscribeControl('cstm') to clear speech to text metrics in VoipSpeechToTextMetricsT
This is used in a fix where incorrect stt metrics may be reported, to make use of this fix update BlazeSDK
to trama.1.
DirtySDK (XboxOne)
VoipConnection
Added VoipConnectionlistT::bApplyRelFromMuting.
Changes in this release:
DirtySDK (All)
DirtyJPG
Fixed a crash when attempting to decode an unsupported JPEG variant; an error is returned instead.
NetConnCommon
Fixed the external list processing potentially being processed by separate threads which can cause double
destroys by using a crit.
ProtoSSL
Fixed to add limited unicode support (truncation of 16bit ASCII characters to 8bit ASCII) to ASN.1
certificate string parsing.
Fixed bug that prevented an ECDSA root ca from working.
Voip
Fixed a bunch of status/control selector not retuning proper error codes causing log spam.
Fixed how local voip users set their crossplay flag, which prevents the receiving side from printing this
incorrect log:
voipconnection: [0] error, platform 2, persona 1000000517837 attempted to join, but cross play is not
enabled remotely.
VoipBlockList
Improved VoipBlockListIsBlocked, when passed a VOIP_SHARED_USER_INDEX it will check all the local users to
determine if iBlockedAccountId should be blocked.
Fixed destruction, by caching the memgroup information and use it on destruction instead of re-querying it.
VoipCodec
Added 'plvl' status selector to support querying of current audio power level as calculated for VAD.
VoipCommon
Removed superfluous conditions in VoipCommonUpdateRemoteStatus as the same conditions are being checked
in VoipConnectionSetSendMask() and VoipConnectionSetRecvMask()
Fixed default channel selection for the shared user. The default behavior is to have the shared user
have the most restrictive set of channels between all the local users and blocking communication on the
shared user if there are no channels shared by all of the local users.
VoipConnection
Changed remote user registration path to now flag that reapplying channel config is necessary
(for join-in-progress only).
Fixed invalid behavior in the voipconnection due to buffer overrun when making shared user updates by using
the correct shared user index.
DirtySDK (iOS)
NetConnIos
Fix crash in netconnios when attempting to call into netconn common, but it has no ref to do that.
DirtySDK (NX)
DirtyErrNX
Changed all the error codes to use Nintendo specific ones.
DirtyNetNX
Fixed the destruction of the hostname cache to happen after the last _SocketIdle call to ensure we don't
crash on shutdown.
DirtySDK (PC)
VoipHeadsetPC
Fixed _VoipHeadsetSendEncodedAudio() to use a memcleared voipUser for remoteUser instead of an empty string
when loopback is enabled.
Fixed 'aloc' selector incorrectly returning error code upon user going from 'participating' to
'not participating'.
VoipNarratePC
Fixed crash if CoInitialize failed by setting the failure state and not destroying the ref.
VoipPC
Removed dead code from _VoipActivateLocalTalker(): inappropriate error handling for 'aloc' selector
because it can't return a negative value.
DirtySDK (PS4)
DirtyErrPS4
Removed the errors that no longer exist in SDK7.000 conditionally to maintain backwards compat with
SDK6.500
DirtySessionManagerPS4
Fixed an issue where the meta data on the available invites would not be updated if the invite was received
while we were in the console's REST state, this prevent the user from successfully joining the invite.
Now upon attempting to join an invite from the system software we will no longer assume the list is up to
date.
ProtoHttpPS4
Fixed redirects failing due to not being able to parse the location header.
DirtySDK (XboxOne)
ProtoMangelXboxOne
Fixed crash in the IncomingAssociationEventHandler by validating that the module ref is still valid and
unregistering the event handler like we do in other areas of DirtySock.
Fixed exception that gets thrown when trying to access a security association that was cleaned up by the
remote peer by not accessing the state.
Fixed crash when mutating the security association vector between the event handler and main thread by
protecting the writing with a crit.
Moved the manipulation of the list before we start the destruction and protect with the new global state
crit to ensure the operation has succeeded to prevent invalid access to a killed crit.
UserApiXboxOne
Added handling of http errors code in _UserApiProcessProfileResponse
VoipCommon
Fixed setting bApplyRelFromMuting whenever send masks have been altered, this makes it so the communication
relationship is reflected by the change of channels. Prior to this bApplyRelFromMuting was only being set
when a user was activated, which could result in updates for mute/unmute, not working.
Fixed the 'umic' and 'uspkr' control selector to set bApplyRelFromMuting to reflect changes in title code
mute.
VoipConnection
Changed remote user registration path to now flag that reapplying communication relationships is
necessary (for both initial connect and join-in-progress).
VoipConnection/VoipXboxOne
Code reapplying communication relationships was moved from VoipConnectionSetSendMask() and
VoipConnectionSetRecvMask() to the _VoipThread().
VoipHeadsetXboxOne
Fixed to capture sttEventCount and sttCharCountRecv metrics.
Removed the comment block around code dealing with first party mute. First party mute will now work as long
as you are on XDK July QFE 9.
Fixed to allow enabling/disabling STT functionality with the 'tran' control for crossplay mode, when you
are not yet in crossplay mode.
VoipXboxOne
Modified local user registration and activation paths to now flag that reapplying communication
relationships is necessary.
EADP Game Services DirtySDK 15.1.6.0.0 - July 24, 2019
EA Config 5.14.04
Framework 7.19.00
Android AndroidSDK 28
AndroidNDK r15c-1
android_config 4.06.01
Capilano CapilanoSDK 180702-proxy
capilano_config 2.07.02
Kettle kettlesdk 6.508.001-proxy
kettle_config 2.11.00
PlayStation4AppContentEx 6.508.010
PlayStation4AudioInEx 6.508.001
NX nx_config 1.00.04
nxsdk 7.2.1
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Win32 DotNet 4.0-2
DotNetSDK 2.0-4
VisualStudio 15.4.27004.2002-2-proxy
WindowsSDK 10.0.10586-proxy
*** Important - First crossplay compatible release ***
This is the first DirtySDK release that supports crossplay. For more information please refer to our
crossplay integration guide : https://developer.ea.com/display/TEAMS/Cross+Play+Integration+Guide
https://developer.ea.com/display/dirtysock/VoIP+Tech#VoIPTech-CrossplayConstraints
Crossplay is NOT SHIPPABLE for this release.
New in this release:
Contrib (ALL)
VoipOpus
Changed VoipOpus to be available on pc, ps4 and xone platforms; for use in cross play mode.
Added speex resampler, to convert to a standard sample rate when needed (for xone).
Added the _VoipOpusControl selectors:
'infl' - Set if the input samples are float via iValue, (default int16)
'inin' - Set if the input samples are int32_t via iValue, (default int16)
'insr' - Set the input sample rate (default 16000)
DirtySDK (All)
NetGameDistServ
Added the ability to configure a logging callback which allows logging using a different mechanism.
This is used in cases where we want to log to a different logger on release builds that don't have debug
logging.
ProtoHttp
Added an explicit failure code to report a failure due to the maximum number of redirections being
exceeded.
ProtoSSL
Added the support for enabling and disabling of individual curves.
Added debug print of from/till times if a certifiicate is determined to be expired.
Voip
Added the ability to set the thread affinity for the VoIP thread when it differs from DirtySDK.
VoipBlockList
Added VoipBlockList, when integrated with Social's "Muting Web API" produces a cross platform persistent
muting feature. An example of its usage is found in BlazeSDK\samples\Ignition\Friends.cpp. The
VoipBlockList is created when VoipStartup is called, game code is responsible for calling VoipBlockListAdd,
VoipBlockListRemove, and VoipBlockListClear as needed to keep the DirtySDK representation of the mute list
up to date. It is possible to call VoipBlockListIsBlocked to validate if communication is blocked between
the two users. All of these functions operate on a local user index and an account id of the muted user.
DirtySDK (PC)
VoipHeadsetPC
Added '-pbk' and '+pbk' selectors which were available on PC and XOne, making muting functionality
consistent.
DirtySDK (PS4)
VoipHeadsetPS4
Added cross-play support.
DirtySDK (XboxOne)
NetConnXboxOne
Added 'tsbx' selector, allowing override of test sandbox name. This obviates the need for hosting a file
to specify the sandbox name, although that capability remains.
VoipXboxOne, VoipHeadsetXboxOne
Added cross-play support.
Changes in this release:
DirtySDK (All)
CryptChaCha
Changed the implementation of Encrypt and Decrypt to skip Poly1305 if NULL is passed to pTag. In some cases
we just want to use ChaCha20 to encrypt and decrypt, while not needing to use Poly1305 for MAC.
Optimized the block operation by using memcpy to eliminate an unnecessary loop.
CryptNist
Changed the ECDSA signing operations to generate the signatures deterministically by generating k based on
the message hash, private key and curve parameters.
Decreased the size of the private key state, the largest we will need is 48 bytes.
CryptRand
Improved our PRNG implementation using CryptChaCha. Since each platform we target has a method to get random
bytes from their entropy pool and our fallback is not secure, we have opted to move to a new system of
generating random data. In this new system we use a small amount of random bytes fro the ChaCha cipher key
and IV (nonce) to generate pseudo random bytes.
DirtyThread
Suppressed the 4702 warning around our main thread which caused issues when LTCG is enabled.
Removed the call to ThreadEnd as the EAThread Mutex assert issue came back on newer versions. The call is
not needed for the trouble it has caused us.
NetConn
Added NetConnAccountInfo struct that stores user's nucleus account id and persona id. 'acid' and 'peid' control
selectors will be used to populate it.
ProtoHttpUtil
Fixed ProtoHttpUrlDecodeStrParm() to reserve space for terminating null character (preventing possible
overflow of the null). Also fixed to not read past the end of the input buffer if a percent character
was the second-to-last or last character.
ProtoHttp2
Enhanced the header formatting to use the available space in the output buffer for formatting. This allows
for formatting much larger headers without extra allocations.
ProtoSSL
Changed the module to use platform ds_strsplit and removed the _ProtoSSLSplitDelimitedString.
Removed CA certificates with < SHA-256 hash, with the exception of VeriSign Class 3 Public Primary
Certification Authority - G5 which is still required by C&I. Additionally removed VeriSign Universal Root
CA that never saw use.
Fixed server to not automatically enable all TLS1.3 ciphers if TLS1.3 is enabled and no TLS1.3 ciphers
are enabled.
Voip
Removed VoipRemove and VoipConnectionRemove, these functions are no longer called.
Moved internal functions in voip.h to voipcommon.h which is where our internal/private APIs are located.
Moved VoipActivateLocalUser to VoipCommon to make sure that customers are calling VoipGroupActivateUser.
VoipCommon
Removed the controls in voipcommon that are used internally to prevent customers from calling them. Instead
of calling the controls, functions were added that are accessible to the source layer of the voip subsystem.
Moved the VoIP memory function to be part of VoipCommon and removed the implementations for VoipPriv.
Removed the NULL check for voipcommon state in _VoipCommonTextDataCb as the state will always be valid.
Headset who calls this callback is owned by VoipCommon, thus it cannot be NULL when getting a callback. This
code trips coverity defects because it assumes if you check here you have to check in the later parts of the
function.
Removed VoipCommonStatus('ruid') and added 'rcvu', since this no longer returns the remote user id. 'rcvu'
returns the "remote connection voip user"
VoipConduit
Added support for multiple VoIP mixers.
Added support for controlling playback (used for muting) through a playback callback.
VoipConnection
Fixed crash when invalid user index is passed into VoipConnectionSend by early returning in this case.
Changed the shared user index sent to remote players to VOIP_SHARED_REMOTE_INDEX which -1.
VoipHeadset
Removed VoipHeadsetStatus('ruid') and added 'ruvu', since it does not operate on id's. 'ruvu' returns (TRUE)
if the "remote user voip user" is registered in voip headset.
VoipPriv
Removed VoipTimerT as it is no longer used.
Changed VoipUserT to contain only the NetConnAccountInfo, voip user flags and the platform type of
the voip user. It will no longer contain first party IDs.
Changed VOIP_NullUser and VOIP_SameUser macros to compare persona IDs.
DirtySDK (PC)
CryptRand
Switched PC to use BCrypt to align with XboxOne.
VoipHeadsetPC
Removed the default setting of the volume to 90 on the audio output device. This was interfering with game
settings.
DirtySDK (PS4)
DirtyWebApiPS4
Fixed DirtyWebApiAddPushEventListener* so it returns a valid id to be passed back to
DirtyWebApiRemovePushEventListener.
DirtySDK (NX)
ZFileNX
Removed zfilenx as it is identical to unix outside of one function which we ifdef out on that platform.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Enhanced implementation of _ProtoHttpXmlHttpWritingToOutstream() for more robustness. Previous
implementation assumed that iBlockingOpsThreadResult would always contain a number of bytes accumulated
equal to the number of bytes originally submitted. After reviewing the implementation of
SequentialStream::Write(), this assumption proved to be luckily correct (thus this CL being on ml only
and not being associated with a critical ticket). But it was decided to change the implementation of
_ProtoHttpXmlHttpWritingToOutstream() to avoid coding pattern based on an "implicit" assumption.
With the new implementation, things will still work in the future if SequentialStream::Write() is
modified and no longer behave the same (i.e. it could result in partial accumulation).
ProtoMangleXboxOne
Removed entering/leaving MangleCrit in the lambda executed upon completion of the creation of a security
association. It was left over from a previous implementation and it was no longer protecting any specific
thread safety access.
VoipCommon
Fixed an issue in _VoipCommonReceiveTextDataNativeCb preventing local user from seeing their own Speech To
Text, requires QFE5 of the July 2018 XDK
VoipDef, VoipGroup
Removed VoipCbTypeE::VOIP_CBTYPE_AMBREVENT (xboxone-only bad rep auto mute event). It had been unused
since rebasing voip xboxone to game chat 2 (i.e. since Shrike.0).
Removed xboxone-specific fields from VoipSynthesizedSpeechCfgT because the 'voic' control selector is
no longer usable on xboxone since the introduction of MS Game Chat 2 in Shrike.0.
VoipHeadsetXboxOne
Changed implementation to comply with game chat 2 reference doc (Xbox Live API Compiled HTML Help) and
MS sample code: only call synthesize_text_to_speech() if text_to_speech_conversion_preference_enabled()
is true for the originator.
Fixed XMA/audio issues experienced by customers by setting the DO_NOT_USE_SHAPE flag when initializing
XAudio2 for use with text narration. Based on the conversation with NHL and the Frostbite Audio team. By not
using DO_NOT_USE_SHAPE we cause the current xma allocations to have bad data.
EADP Game Services DirtySDK 15.1.5.0.2 - June 20, 2019
EA Config 5.14.04
Framework 7.19.00
Android AndroidSDK 28
AndroidNDK r15c-1
android_config 4.06.01
Capilano CapilanoSDK 180702-proxy
capilano_config 2.07.02
Kettle kettlesdk 6.508.001-proxy
kettle_config 2.11.00
PlayStation4AppContentEx 6.508.010
PlayStation4AudioInEx 6.508.001
NX nx_config 1.00.04
nxsdk 7.2.1
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Win32 DotNet 4.0-2
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
DirtyNet
Added the 'poln' control to do a blocking poll specified in nanoseconds.
Added a SocktetHostnameCacheProcess function to allow us to expire entries from idle to fix entries never
expiring.
DirtySDK (PS4)
NetConnPS4
Added play-first trial check using NetConnStatus('pftr') selector. This capability is disabled by default,
use -D:dirtysdk-playfirsttrial=true when generating the solution to enable. Requires the
PlayStation4AppContentEx package.
Changed 'tria' selector to additionally return TRUE if play-first trial is enabled.
VoipHeadsetPS4
Added two new public api to be invoked from voipcommon: VoipHeadsetTranscribedTextPermissionCheck()
and VoipHeadsetSetTranscribedTextReceivedCallback().
Added a new callback synopsis: VoipHeadsetTranscribedTextReceivedCbT.
DirtySDK (XBoxOne)
ProtoHttpXboxOne
Added a period of time before we delete the XmlHttp state to prevent accessing invalid memory from the
HttpCallbacks. There is a small window after the COM memory has been released where callbacks can still
be fired. During this period we want to make sure that both the XmlHttp and HttpRef state is still valid
to prevent crashing. This change will increase the time it takes for the kill list to be cleared.
Changes in this release:
DirtySDK (All)
Build
Removed the vccorlib includes to the sample program module as this is no longer needed vs2015+.
ConnApi
Fixed the setup of demangling (and unsetting of addresses) when the game is server hosted but voip is not.
When Xbox Clients setup their dedicated server client in the client list, the address fields in the client
info are set to 0. This causes the connections to the dedicated server to failed because of the invalid IP
addresses.
ProtoHttpServ
Fixed incorrect linked list manipulations in _ProtoHttServUpdateListen(). Problem description: Upon
inserting a new httpthread entry in the httpthread list, if that list already has more than one entry,
the new entry would incorrectly be inserted after the first entry as the tail of the list... resulting
in the rest of the list being lost. As a knock-on of this bug, CCS-DirtyCast ssl connections would no
longer be cleaned up properly... resulting in stunnel spamming with:
LOG3[1301]: transfer: s_poll_wait: TIMEOUTclose exceeded: closing
ProtoSSL
Fixed TLS 1.3 client to return illegal_parameter alert instead of handshake_failure when no cipher is
selected.
Fixed TLS 1.3 client to validate server session id value is empty when the session id sent was empty.
Fixed TLS 1.3 client to support middlebox compatibility mode for session_id field.
Fixed TLS 1.3 client to validate Protocol Version or Supported Versions extension.
Fixed a client bug when a client cert was sent on a previous connection attempt; a subsequent connection
attempt where a client cert was not sent would result in the client trying to send a CertificateVerify
handshake message and crashing with a null-pointer exception.
Fixed TLS 1.3 client/server to abort on non-null compression value.
Fixed TLS 1.3 server to return unexpected_message alert instead of no_negotiation when receiving a Hello
Request message.
Fixed TLS 1.3 server to validate ClientHello version is at most TLS1.2 before parsing supported versions
extension, which previously could overwrite an invalid version before the version was validated.
Fixed to move bCertSent/bCertRecv from the state ref to the secure state ref, renamed to bSentCert/bRecvCert.
These state booleans make more sense being in the secure state, since they track the status of a specific
session, and also benefit from being automatically reset when a new connection is attempted, which is not
the case with the overall state.
Fixed to add handshake state transition validation to prevent invalid messages from causing exceptions,
e.g. if a KeyExchange message is sent before ClientHello.
Fixed to add protection for a server giving us an unsupported elliptic curve (a spec violation).
Fixed to add protection for a hello extension with an extension size extending past the end of the hello.
Fixed to remove SSL3_MSG_HELLO_RETRY_REQUEST define, as it is not an explicitly defined handshake message,
and add SSL3_MSG_END_OF_EARLY_DATA handshake define for future reference/use.
VoipCodec
Fixed VAD to consider all samples in a frame, instead of just the first. Found by inspection.
VoipGroup
Fixed incorrect low-level conn id to high-level conn id translation logic in
_VoipGroupManagerDisplayTranscribedTextCallback()
VoipTranscribe
Fixes for some possible sources of metrics issue observed in production.
DirtySDK (NX)
NetConnNX
Fixed the shutdown by properly clearing the global ref.
DirtySDK (PC)
VoipNarratePC
Suppressed the warnings from the windows headers which can cause issues on higher warning levels.
DirtySDK (PC, PS4)
VoipHeadsetPC,VoipHeadsetPS4
Fixed crash when TTS is enabled but STT is disabled when doing narration by checking for NULL before calling
the 'vdis' control.
DirtySDK (PS4)
NetConnPS4
Fixed _NetConnRequestAuthCode() and _NetConnNpAsyncRequest() not returning a negative when an error is
encountered.
ProtoHttpPS4
Removed the call to sceHttpAbortRequest which breaks following redirects in certain scenarios.
VoipCommon (PS4)
Fixed chat restriction not being properly enforced for inbound transcribed text (fix is inspired from
original MS game chat dll implementation). When inbound transcribed text is received from the network,
voipcommon now passes it to VoipHeadset with a call to VoipHeadsetTranscribedTextPermissionCheck().
If the permission check passes, then VoipHeadset passes the text back to VoipCommon by invoking the
new VoipHeadsetTranscribedTextReceivedCbT callback previously registered with
VoipHeadsetSetTranscribedTextReceivedCallback(). If the permission check fails, VoipHeadset
instead just drops the text and never invokes the VoipHeadsetTranscribedTextReceivedCbT callback.
DirtySDK (Unix)
DirtyNetUnix
Fixed _SocketPoll(), when processing ppoll result, incorrectly including sockets that were not originally
included in the poll. Potential knock-on: process showing 100% CPU usage caused by ppoll continuously
unblocking immediately.
VoipUnix
Changed implementation of VoipSetLocalUser() to initialize the local user with user id "dummy_voip_user"
instead of the string returned by NetConnMAC(). This change was done to work around NetConnMAC() not
always returning a valid string when used on a VM because the name of the NIC does not match what
NetConnMAC() is looking for (eth0, eth1 or wlan0). See implementation of _SocketGetMacAddress() in
dirtynetunix. NetConnMAC misbehaving results in VoipSetLocalUser() creating 'empty' voip user id, and
the stress client no longer sending voip traffic over established voip connection because the send mask
is incorrect as a result of the user id being NULL.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Fixed use after free crash in _ProtoHttpProcessKillList by moving the _ProtoHttpUpdateXmlHttp to be the last
function that is called within the loop.
UserApiXboxOne
Fixed read access violation when growing the response buffer after the second PROTOHTTP_RECVBUFF by only
copying the exact amount of data in the source buffer.
VoipHeadsetXboxOne
Enhanced implementation of _VoipHeadsetSetRemotUserOutboundMute() and
_VoipHeadsetSetRemotUserInboundMute() to guard against the possibility of
pRemoteChatUser->custom_user_context() being NULL.
VoipNarrateXboxOne
Changed the AsyncStatus to be fully scoped which fixes build errors in certain conditions.
EADP Game Services DirtySDK 15.1.5.0.1 - April 9, 2019
EA Config 5.14.04
Framework 7.19.00
Android AndroidSDK 28
AndroidNDK r15c-1
android_config 4.06.01
Capilano CapilanoSDK 180702-proxy
capilano_config 2.07.02
Kettle kettlesdk 6.008.001-proxy
kettle_config 2.11.00
PlayStation4AudioInEx 6.008.001
NX nx_config 1.00.04
nxsdk 7.2.1
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Win32 DotNet 4.0-2
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
*** Important - First DirtySDK release with NX Support ***
This is the first DirtySDK release with official NX support. Currently VoIP, UserApi and UserListApi are not
supported on this platform.
*** Important - API Breaking Change ***
The VoipDisplayTranscribeTextCallback function prototype has been changed to return an int32_t instead of
returning void. This enables the user callback to signal that text has been rendered, and prevent the text
from possibly being rendered again from a different VoipGroup.
New in this release:
DirtySDK (All)
Aws
Added keyPath to signing info.
Added reading and writing of signed binary events, used in transcription.
Voip
Added new VOIP_CBTYPE_TTOSEVENT event type to VoipCallback; this event signals the start and end of TTS.
It can be used to temporarily override a push-to-talk system to allow the audio to be sent to the other
player(s) without requiring push-to-talk to be manually activated by the user.
VoipPC,VoipPS4
Added auto-muting of audio input when send mask is zero. This prevents STT from taking place when the user
is muted, e.g. in a push-to-talk system when PTT is not engaged.
Added polling of TTOS status and updating the VoipCommon status variable that tracks it.
VoipCommon
Added tracking of ttos status, and triggering of VOIP_CBTYPE_TTOSEVENT when ttos status changes.
VoipHeadsetPC,VoipHeadsetPS4
Added 'ttos' status selector to indicate when text-to-speech is active.
Added 'mute' control and status selector to mute input audio, used to prevent transcription when
a player is not sending any audio.
Added 'spam' pass-through to VoipTranscribe, to allow setting debug level of that module.
VoipTranscribe
Added Amazon Transcribe support.
Added 'vdsc' control selector to enable/disable the short audio discard behavior that is enabled by
default. This is used by the VoipHeadset layer to disable short audio discard during TTS, which
would otherwise prevent STT of short TTS phrases from working.
DirtySDK (NX)
Build
Added NX support
DirtySDK (PC)
VoipHeadsetPC
Added support for 'txta' control which is used to control how text chat accessibility functions in the context of loopback.
DirtySDK (PS4)
VoipHeadsetPS4
Added support for the 'txta' control to change the behavior when using text chat accessibility features.
DirtySDK (XboxOne)
VoipNarrateXboxOne
Added the narrate module on xboxone to perform non-voip based narration that can be used for text chat.
Changes/fixes in this release:
DirtySDK (All)
Aws
Fixed xcode build warnings due to truncation.
ProtoHttp2
Changed to increase header cache size from 1k to 2k; this allows sending and receiving larger headers.
Changed the implemention to ignore frames from untracked (closed) streams.
Per the spec: WINDOW_UPDATE can be sent by a peer that has sent a frame bearing the END_STREAM flag.
Fixed append header rejects new headers if the previous header values were appended to by switching to
strcmp from strncmp.
VoipDef
[API BREAKING] Changed VoipDisplayTranscribedTextCallback to return an int32_t instead of void. This
allows the application to indicate when it has displayed transcribed text, and prevent further callbacks
against other voipgroups with the same text.
VoipGroup
Changed the implementation such that the voipgroup layer registers its 'display transcribed text'
callback with the underlying voip sub-system as soon as the voipgroup manager gets created, and such
that the voipgroup layer only unregisters that callback upon destruction of the voipgroup manager.
This change is inspired from the way the 'event' callback is registered/unregistered and it is necessary
to avoid a possible situation where the 'display transcribed text' callback gets called from the
voip thread after the voipgroup manager got destroyed, which can happen if the voipgroup manager is
destroyed after text is submitted for transcription but before the transcription result is received.
Removed incorrect usage of critical section from VoipGroupSetDisplayTranscribedTextCallback(). Potential
deadlock before this fix:
--> voip thread locking pVoip->Common.ThreadCrit first from _VoipThread() and then blocking on
NetCritEnter(&pManager->crit) from _VoipGroupManagerEventCallback()
--> main thread locking pManager->crit first from VoipGroupSetDisplayTranscribedTextCallback()
and then blocking on NetCritEnter(&pVoipCommon->ThreadCrit) from
VoipSetDisplayTranscribedTextCallback()
Changed _VoipGroupManagerDisplayTranscribedTextCallback() to respond to the new
VoipDisplayTranscribedTextCallback return parameter and stop iterating through voipgroups if the callback
returns TRUE.
VoipNarrate
Fixed an issue formatting the Microsoft request body where the format string and parameter count didn't
match.
Fixed to release any queued requests on destroy.
Changed VOIPTRANSCRIBE_INPUT_MAX to VOIPNARRATE_INPUT_MAX based on coding standards.
VoipTranscribe
Fixed a bug where the STT uDurationMsSent metric was not set to the correct value, often being 0.
Fixed a bug with google+http encoding where the Base64 request could be terminated too early, resulting in
a 400 server error.
Fixed an issue parsing google error response.
Changed to increase the size of the JSON parse buffer to be able to handle large Amazon responses.
Changed to increase the ref response buffer substantially to be able to handle large Amazon responses.
Changed Watson parsing to use the ref parse buffer instead of allocating dynamically.
Fixed to allow specification of a non-encoded Watson apikey, as VoipNarrate does. Pre-encoded Watson
apikeys are still supported, but will be deprecated in the future.
Fixed Watson/Websockets transcription request failing if the server has timed us out since the last
request.
Added smart_formatting enable for Watson (e.g. "one two three" becomes "1 2 3").
Fixed to eat %HESITATION markers from Watson transcription result, if present.
Fixed a metrics issue where a buffer could be submitted every VoipTranscribeUpdate() execution while
receiving a response, if a very large untranscribable buffer was previously submitted. The impact of this
issue was that metrics would be ticked every frame and very quickly result in bogus metrics with hundreds
of imaginary transactions spanning thousands of minutes. The fix is to wait to submit until the ongoing
receive operation is complete. In practice, this situation is very hard to trigger and involves many
consecutive empty transaction results and a maximum backoff timer of 60s.
VoipTunnel
Fixed the voice "squelching" logic to not only release the appropriate rebroadcasting slot(s) when the
voice originator stops talking, but also when the voice originator mutes a subset of the players
(voice consumers) to which he is talking.
DirtySDK (PC)
VoipDef
Changed PC VOIP_MAXLOCALUSERS from 1 to 4, to match NETCONN_MAXLOCALUSERS
VoipHeadsetPC
Fixed the 'voic' selector and improved voipnarratepc to support other languages with the voic selector.
Changed PC voip to allow multiple local users, there is still only one device, so there may only be one
active user at a time. Recording, playback, transcription, STT/TTS metrics only function for the active
user index.
Changed VoipHeadsetControl 'aloc' which now takes and store the active user index.
Fixed transcription buffer size to use define instead of being hardcoded at 256.
Fixed assignment of iDebugLevel to be done only under DIRTYCODE_LOGGING=1
VoipPC
Changed so that all users on a PC will have the same headset status.
Changed VoipSetLocalUser to take user index into account (like other platforms).
Changed VoipActivateLocalUser to take user index into account (like other platforms) however with the added
limitation that only one user can be active at a time, if the active user becomes deactivated a new user
will be selected if possible.
DirtySDK (PS4)
VoipHeadsetPS4
Fixed severe stuttering audio issue with PS4 camera voip, broken in audio input pipeline refactor in
Raven.5.
DirtySDK (Unix)
DirtyNetUnix
Moved the SocketHost logging behind a verbosity check to reduce spam that is not helpful in most cases.
DirtySDK (XboxOne)
ConnApi
Fixed the voip server dedicated flow to not perform unnecessary demangling on Xbox One.
DirtyAuthXboxOne
Fixed potential deadlocks by adding the missing NetCritLeave calls when returning early due to errors.
ProtoHttpXboxOne
Fixed ProtoHttpSend() with an implicit call to ProtoHttpUpdate() to allow internal state machine to be
pumped when ProtoHttpSend() is called repeatedly without intermediate calls to ProtoHttpUpdate().
Changed implementation such that ProtoHttpPost(), ProtoHttpPut() and ProtoHttpPatch() can be used without
a mandatory subsequent call to ProtoHttpSend() as it used to be supported prior to Shrike.0. Fix consists
in buffering request data passed to ProtoHttpRequestCb2() into a new "pre-send" buffer. A new PRESEND state
is also introduced to accumulate the content of the pre-send buffer into the xmlhttp object's outbound
sequential stream before accepting any new data from the user subsequently calling ProtoHttpSend().
Fixed a bug introduced in Shrike.0 which included a ProtoHttpXboxone refactor to improve the way
potentially long blocking MS calls are being offloaded to worker threads. The new solution broke an edge
case involving request redirection. Upon some race conditions, a request redirection may be incorrectly failed.
Fixed the possibility of an xmlhttp req being stalled in state
ProtoHttpXmlReqStateE::REQ_ST_WAITING_RESPONSE when a race condition is exercised: xmlhttp req's event
handler modifying eNextState before the main thread initializes it to REQ_ST_INIT.
Fixed a crashed in OnError by adding a check for bWaitingForAsyncCompletion in _ProtoHttpProcessKillList().
bWaitingForAsyncCompletion must be false before xmlHttp can transition states
EADP Game Services DirtySDK 15.1.5.0.0 - January 23, 2019
This SDK release was built using the following compiler packages:
EA Config 5.14.04
Framework 7.19.00
Android AndroidSDK 26.0.2-3
AndroidNDK r13b-1
android_config 4.03.00
Capilano CapilanoSDK 180702-proxy
capilano_config 2.07.02
Kettle kettlesdk 6.008.001-proxy
kettle_config 2.11.00
PlayStation4AudioInEx 6.008.001
iPhone ios_config 1.14.00
OSX osx_config 1.20.01
Linux/Unix UnixClang 4.0.1
Win32 DotNet 4.0-2
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
*** Important - PUBLIC API IMPACTING - ***
Reference: https://developer.ea.com/display/dirtysock/DirtySock+Shrike+Upgrade+Guide
CryptMD2 has been removed as MD2 support is obsolete.
Removed VOIP_LOCAL_USER_MICON which has been unused since PS2 era.
DirtySDK voip for xboxone now use MS Game Chat 2
* Game chat 2 now needs to be added as a sdkreference in nant build scripts. This step is needed for the
game chat 2 dll to be copied to the deployment directory as a post build step.
<sdkreferences if="${config-system} == 'capilano'">
Xbox.Game.Chat.2.Cpp.API, Version=8.0
</sdkreferences>
* Because MS game chat 2 is internally dealing with retrieval of XBL accessibility settings for the user,
DirtySDK XboxOne voip no longer needs to be fed with that info by the game code.
* DirtySDK XboxOne voip is no longer displaying inbound transcribed text in system UI if
game code does not register a display transcribed text callback. (New behavior resulting from
VoipHeadsetXBoxOne being rebased from from windows::xbox::chat to MS game chat 2)
* DirtySDK XboxOne voip no longer supports the feature originally requested by the EA accessibility team: a
hearing-impaired person requesting transcribed text from other players also wants to see transcribed text
for his/her own speech. (New behavior resulting from VoipHeadsetXBoxOne being rebased from from
windows::xbox::chat to MS game chat 2)
New in this release:
DirtySDK (All)
AWS
Added new module to supply various utility functions in support of connecting to AWS services, starting
with AWS Signature Version 4.
ConnApi
Added the game / voip topology configuration to the module, which allows complexity that existed in the
network adapter to be moved down.
Added status selectors for the configured timeout values.
CryptBn
Added the CryptBnBitAnd and CryptBnBitXor which performs bitwise and; bitwise xor operations
CryptCurve
Introduced cryptcurve, an interface over the multiple curve modules we support.
CryptEcc
Added a new parameter to CryptEccPointFinal to let us know if we are encoding the shared secret into a
buffer.
CryptHash
Added the ability to lookup the hash based on the size.
CryptMont
Added support for X25519 and X448 curves based on RFC7748.
DirtyLib
Added the ability to set an option for crits via NetCritInit2 and added an option to enable a crit in
single-threaded mode for specific multi-threaded scenarios (SocketLookup).
Added NetLibCrc32 to calculate CRC32, with optional table parameter.
DirtyMem
Added new VOIP_PLATFORM_MEMID memory identifier.
Plat-Str
Added new string functions ds_fmtoctstring_lc, ds_strtolower, ds_strtoupper, ds_strtrim, and
ds_strlistinsert in support of AWSV4 signing.
Plat-Time
Added TIMETOSTRING_CONVERSION_ISO_8601_BASIC to supported ds_timetostr conversion options.
ProtoHttp2
Added the ability to decode the debug data in GOAWAY frames.
ProtoHttpUtil
Added ProtoHttpUtilParseRequest() for parsing the first line of an HTTP request, functionality refactored
from _ProtoHttpServParseHeader()
ProtoHttpServ
Added new ProtoHttpServControl2 API to allow setting SSL settings specific to a ProtoHttpServ thread.
Protomangle
Added the service name to the demangler query for better tracking
ProtoTunnel
Added control to allow setting the behavior for trying a random port on bind failure.
Added control selectors for maximum number of receive calls per update and idle callback rate.
VoipConnection
Added support for "reliable opaque" data type needed for sending/receiving MS game chat 2's reliable data
frames. (MS Game chat 2's unreliable data frames are sent as 'MIC' packets.)
Added a iConnId parameter to VoipConnectRecvVoiceCbT and VoipConnectRegUserCbT.
Added VoipConnectRecvOpaqueCbT.
Added a uSendMask parameter to VoipConnectionSend().
VoipHeadset
Added VoipHeadsetReceiveOpaqueDataCb().
VoipNarrate
Added Amazon Polly support.
DirtySDK (Apple)
Build
Added a warning for partial available so the build will fail when the deployment version is too low for the
APIs we reference.
Created an objectivec build type that imports all our C warnings that we enable.
ProtoSSLApple
Added support for the ALPN extension on versions of the OS that support it.
DirtySDK (PC)
VoipNarratePC
Added a new VoipNarrate PC module
*Separated TTS SAPI on PC into it own VoipNarratePC module
*Removed the need of copying the output of SAPI into wav buffers
*Aligned behavior with the generic VoipNarrate module
DirtySDK (XboxOne)
Build scripts
Added game chat 2 header file directory to include path. Added game chat 2 lib to set of external libs to
be linked with.
Added game chat 2 lib to set of external libs to be linked with.
PrivilegeApiXboxOne
Added exception handling around usage of xboxone user object methods.
UserApiXboxOne
Added exception handling around usage of xboxone user object methods.
UserListApiXboxOne
Added exception handling around usage of xboxone user object methods.
VoipHeadset
Added VoipHeadsetTranscribedTextReceivedCbT and VoipHeadsetSetTranscribedTextReceivedCallback().
VoipXboxOne
Added _VoipUpdateLocalStatus() in charge of polling VoipHeadsetStatus('talk') to detect if local players
are talking or not.
Changes/fixes in this release:
DirtySDK (All)
CommUdp
Minor fix to use SockaddrInit instead of ds_memclr to make sure the address family is properly specified,
preventing possible warning in later sockaddr call.
ConnApi
Reduced the complexity of the implementation of connapi now that we have knowledge of the topologies and
hosts.
Fixed the initialization of the game / voip host, this needs to be happen before any other initialization
to make sure everything lands in the correct state.
Replaced usage of ConnApiClientInfoT.uId with uLocalClientId / uRemoteClientId where appropriate. uId is
used for identification purposes, in cases where we are establishing a connection the uLocalClientId and
uRemoteClientId are to be used.
CryptEcc/CryptNist
Changed the module to split up the DH and DSA states, which allows them to be used independently.
Changed the implementation to allocate the table on the fly instead of keep it in the state. This work
reduces the sitting memory consumption.
Changed the initialization of the curve state to use the curve identifier.
Renamed CryptEcc to CryptNist, CryptNist is more specific to the curves we support in the module.
CryptHmac
Fixed to work with keys longer than the block size.
CryptMont
Changed the implementation to return an error if passed an unsupported curve identifier.
DirtyLib
Changed the NetCritInit functions to return an error if the internal allocation fails.
DirtyNet
Changed SocketBind to fail if the virtual socket is already bound.
Improved the thread safety in SocketDestroy by protecting the calls to SocketClose. SocketClose may be
invoked at the same time that the DirtyNet subsystem is being destroyed which we must protect against.
Replaced the use of uCalllast = 0xFFFFFFFF to the boolean bInCallback to prevent the potential of colliding
with a valid tick value
DirtyThread
Changed the thread initialization to set the processor to any.
Hpack
Increased the temporary buffer for header parsing to prevent header value truncation.
Fixed the encoding of large header values (over 127 bytes) to properly encode the size by offsetting after
the value has been written.
JsonParse
Fixed an issue in JsonFind where parsing an incomplete object caused by invalid JSON could cause a crash.
NetGameDist
Fixed compilation errors inside the TIMING_DEBUG defines.
Platform
Removed unused undefs and defines in this module.
ProtoHttp
Changed the calling of the custom header callback to pass NULL and 0 to pData and iDataLen in preparation
for these parameters being deprecated.
ProtoHttp2
Changed the implementation to validate the frame header and the individual frame types payloads per the
spec.
Fixed documentation for some internal enumerations and fixed SETTINGS_NUM to use the correct value.
Enabled huffman coding for HTTP/2 header by default.
Fixed the content-length header to be all lower case.
Changed "not enough room" debug print in ProtoHttp2Send use verbosity level 1 so that it is not enabled at
the default logging level.
ProtoHttpUtil
Removed the call to ProtoHttpGetLocationheader via ProtoHttpGetHeaderValue as the functionality was
deprecated.
ProtoSSL
Fixed to send of empty renegotiation_info extension in ClientHello; there are a small number of
servers that require this or will fail the connection.
Fixed to send of empty renegotiation_info extension in ServerHello if the client sent one.
Changed to add no_renegotiation warning alert response by client if a server attempts to renegotiate.
Fixed a TLS1.3 issue where receiving a ChangeCipherSpec immediately following a HelloRetryRequest would not
be correctly ignored, because the supported_versions extension in the HRR was not being parsed.
Changed _RecvCertificate to simplify and clarify the certificate parsing, as well as do a better job
skipping certificates that aren't a part of the chain and might violate some of the other checks which
previously would have resulted in verification failure.
Removed TLS1.3 draft revision support, and updated all draft RFC links to reference the published final RFC
instead.
Removed SSLv3 version support (previously disabled by default).
Removed RC4 cipher suites (previously disabled by default).
Cleaned up some remaining unused MD2 signature algorithm definitions.
Reorganized/renamed most functions to provide better and more consistent readability. No functional
change.
Fixed some out-of-date curve defines that limited the 'crvd' selector to only choosing the first two
curves.
Added full support for RFC8446 style downgrade detection; added server support for setting random values,
added client support for detecting and aborting a TLS1.2 request being illegally downgraded).
Added server support for remembering HRR cipher we sent, and making sure it is selected when we send the
following ServerHello. Added client support for remembering HRR cipher we received, and making sure we get
it from the ServerHello, alerting if not.
Fixed to send an illegal_parameter alert when client parses a supported_versions extension with no versions
we support.
Changed debug output of connecting hostname to include "using TLSx".
ProtoStream
Fixed copy of error text to copy only the error text (was also copying leftover data from previous request).
ProtoWebSocket
Removed the Listen/Accept functions as we do not have plans on adding server functionality at this time.
Removed ProtoWebSocketConnect2 function as it is not used for anything. Please use ProtoWebSocketConnect
function instead.
VoipCommon
Enhanced implementation of VoipCommonContro('vcid') to support usage of client id 0.
VoipConnection
Changed resetting the VOIP_LOCAL_USER_SENDVOICE and VOIP_REMOTE_USER_RECVVOICE to be triggered if we have
not sent or recv a mic packet within the VOIP_PING RATE.
Enhanced implementation to support scenarios where blaze ends up exercising the solution in such a way
that VoipControl('vcid') gets called with a 0 value. A client id of 0 is now valid and a boolean is now
used to indicate whether the 'vcid' selector was used to set the local user id.
VoipDef
Removed VOIP_LOCAL_USER_MICON which has been unused since PS2 era.
Changed VOIP_MAXCONNECT from 30 to 32.
VoipNarrate
Changed VoipNarrateConfig() to no longer take a VoipNarrateRefT, the supplied configuration is stored
globally and used in all calls to VoipNarrateCreate(). VoipNarrateCreate() will fail if not configured
properly.
Changed VoipNarrateStatus() to have an additional argument 'iValue' to match the same function signature of
other status functions.
VoipSpeex
Changed speex codec to use the built-in VoipCodec VAD instead of re-implementing internally.
VoipTranscribe
Changed VoipTranscribeConfig() to no longer take a VoipTranscribeRefT, the supplied configuration is stored
globally and used by all calls to VoipTranscribeCreate(). VoipTranscribeCreate() will fail if not configured
properly.
Changed VoipTranscribeSubmit() to no longer take an iUserIndex argument, MLU was implemented above this api.
Changed VoipTranscribeGet() to no longer take an iUserIndex argument, MLU was implemented above this api.
Changed VoipTranscribeStatus() to have an additional argument 'iValue' to match the same function signature
of other status functions.
VoipTunnel
Changed the module to use the VoipPacketHeadT definition from voippacket.h
DirtySDK (Apple)
ProtoSSLApple
Moved the validation of the peer certificate to its own function and state. The validation of the peer
certificates plus the handshaking causes a performance spike. Moving this into a different state and
function makes it so it gets processed on the next update.
Removed RC4 cipher suites.
Fixed a crash when calling ProtoSSLClrCACerts before ProtoSSLShutdown by correctly offsetting the array in
the former function.
Changed the implementation to redirect our allocation to DirtyMem using a custom allocator.
DirtySDK (iOS)
NetConnIos
Fixed a strict prototypes build warning by removing prototypes that were not needed.
DirtySDK (PC)
VoipHeadsetPC
Moved the creation of the voice transcription module until it is needed, this saves memory when not in use.
Removed 'qual' selector from VoipControl; none of the codecs we support reference it.
DirtySDK (PS4)
DirtyContextManagerPS4
Fixed DirtyContextManagerShareNetPool() to properly select the lowest slot ref counted NetContext that has a
context size that is greater or equal to the request iNetPoolSize
DirtyNetPS4
Removed the attempted optimization when receiving from the packet queue does not return any data. Given that
the clients and servers don't have a packet rate such that this would be necessary we felt that it is best
to remove it. In observed cases this extra call would result in EAGAIN.
DirtySessionManagerPS4
Changed the server driven session to be enabled by default.
Removed unused parameters from DirtySessionManagerCreate.
Added multi-threaded protection for global variable _ProtoHttp_State.
DirtyWebApiPS4
Changed to deleting the request after sceNpWebApiAbortRequest. This is following Sony guidance in ticket
https://ps4.siedev.net/forums/thread/115651.
ProtoHttpManager
Compiled out the 'pipe' control call on PS4 because the underlying implementation does not support it.
ProtoHttpPS4
Fixed the implementation so that the recv throttling doesn't incorrectly cause the request to finish
prematurely.
Fixed the header formatting to use the input buffer instead of our header cache to prevent truncation.
Fixed the parsing of large parsing values by increasing the buffer we used to parse.
Fixed the request functions to actually send the amount of payload data we sent.
Refactored the call to sceHttpSendRequest() to optionally be called on its own thread.
Fixed a truncation error with _ProtoHttpIsPEMFormat() function by changing the return type from a uint8_t to a int32_t.
VoipHeadsetPS4
Moved the creation of the voice transcription module until it is needed, this saves memory when not in use.
Moved the creation of the voice narration module until it is needed, this saves memory when not in use.
Changed VoipHeadsetStatus('sttm'), MLU is now supported; get VoipSpeechToTextMetricsT via pBuf, user index
is iValue.
Changed VoipHeadsetStatus('ttsm'), MLU is now supported; get VoipTextToSpeechMetricsT via pBuf, user index
is iValue.
Fixed the +-pbk to include the shared user
DirtySDK (Unix)
DirtyNetUnix
Removed the attempted optimization when receiving from the packet queue does not return any data. Given that
the clients and servers don't have a packet rate such that this would be necessary we felt that it is best
to remove it. In observed cases this extra call would result in EAGAIN.
Changed the implementation to allow 'poll' to be called when not in single-threaded mode.
Changed implementation of _SocketGetMacAddress() such that additional interfaces can easily be added to the
hardcoded default list of interfaces used for mac addr query attempts.
NetConnUnix
Fixed the order of operations in shutdown to make sure ProtoSSL is shutdown after its dependents.
VoipUnix
Fixed VoipActivateLocalUser() not properly forcing re-application of channel config.
DirtySDK (XboxOne)
ConnApi
Fixed XboxOne attempting to demangle the connection to the dedicated server when the voip topology is set to peer
web.
Changed the logic for setting up the connection state on XboxOne to always set our gameinfo / voipinfo to be
INIT / Demangled as we never connect to ourselves.
ProtoMangleXboxOne
Enhanced processing of entries in killlist that are in "listening" state. Because there is no system async
op in progress while in that state, we can immediately proceed with a final clean up as soon as the
association is on the killlist.
ProtoHttpXboxoOne
Changed the implementation to address the module potentially negatively impacting the performance of the
game thread using it. Refactored the way potentially long blocking MS calls are being offloaded to worker
threads. The new solution is involving a single dedicated thread (same lifetime as request object) to which
we offload as little as possible to minimize potential threading issues. As a result of this refactor,
usage of critical section has significantly been reduced.
ProtoWebSocketXboxOne
Switched back to the base implementation of ProtoWebSocket on XboxOne. The implementation that is provided on
XboxOne leaves out features that are required for our public API. There are no strict requirements on using
their implementation for WebSockets.
UserListApiXboxOne
Fixed typo in typdef for struct UserListApiPlatformUserContextT as it was colliding with types in
UserApiXboxOne.
Changed to be not case sensitive when checking for "retry-after:
VoipCommon
Changed implementation such that XboxOne is no longer displaying inbound transcribed text in system UI if
game code does not register a display transcribed text callback.
Changed the implementation such that transcribed text to be displayed is now received with a callback
registered with VoipHeadsetSetTranscribedTextReceivedCallback() instead of a callback registered with
VoipConnectionSetCallbacks().
VoipHeadsetXboxOne
Changed the implementation to now use MS game chat 2 instead of windows::xbox::chat.
Changed VoipHeadsetStatus('sttm') will no longer be able to provide metrics for speech to text, as this
info is hidden within game chat 2.
Changed VoipHeadsetStatus('ttsm'), MLU is now supported; get VoipTextToSpeechMetricsT via pBuf, user index
is iValue.
VoipPriv
Removed the specialized VoipUserExT. No longer needd after rebasing VoipHeadsetXboxOne from
windows::xbox::chat to MS game chat 2. DirtySDK XBoxOne voip now uses VoipUserT like all
other platforms.
VoipSerialization
Removed. No longer needed after rebasing VoipHeadsetXboxOne from windows::xbox::chat to MS game chat 2.
VoipXboxOne
Fixed the calculation of the length of time the voip thread took to be milliseconds and not microseconds.
Changed VOIP_THREAD_SLEEP_DURATION from 20 ms to 40 ms to meet MS game chat 2 requirements.
Removed code for auto muting of bad rep user. This is all handled internally by MS game chat 2 now.
EADP Game Services DirtySDK 15.1.4.0.5 - December 20, 2018
This SDK release was built using the following compiler packages:
EA Config 5.07.00
Framework 7.10.00
Android AndroidSDK 26.0.2-2
AndroidNDK r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.07.00
Kettle kettlesdk 5.508.071-proxy
kettle_config 2.09.00
PlayStation4AudioInEx 5.508.001
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 4.0.1
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
*** Important - This release includes full support for VoIP Accessibility on all platforms ***
VoIP Accessibility includes Transcription (Speech to Text or STT) and Narration (Text to Speech or TTS), in order to
fulfill the requirements of the Computer and Video Accessibility Act (CVAA) that will be enforced in the US starting
January 1st, 2019. Previous releases included support of both STT and TTS for the Xbox One and TTS for the PC; this
release adds support for STT on PC and TTS and STT on PS4.
Also includes feature request from EA accessibility team: a hearing-impaired person requesting transcribed text from
other players also wants to see transcribed text for her/his own speech. VoipDisplayTranscribedTextCallbackT
callback is invoked with iConnId parameter set to -1 when transcribed text is from a local user.
Integration requires the application to support rendering of STT text to the screen and acquisition of text from the
user for input into TTS. Please see https://developer.ea.com/pages/viewpage.action?pageId=183248884 or email
GS-DirtySock Support for more information.
*** Important - PUBLIC API IMPACTING - ***
With the addition of full support of PC and PS4 platforms for Accessibility, some API changes have been made to
present a more unified and consistent interface:
- Changed public STT interface to use a utf8-encoded char string instead of wchar_t string
- Changed synopsis of 'stot' control selector: iValue parameter used to be enable/disable, it is now local
user index; pValue parameter used to be local user index, it is now enable/disable.
- Renamed VoipSetTranscribedTextReceivedCallback() to VoipSetDisplayTranscribedTextCallback()
- Renamed VoipGroupSetTranscribedTextReceivedCallback() to VoipGroupSetDisplayTranscribedTextCallback()
- Renamed VoipTranscribedTextReceivedCallbackT to VoipDisplayTranscribedTextCallbackT
- VoipDisplayTranscribedTextCallbackT callback can now be invoked with iConnId parameter set to -1 when
transcribed text is from a local user
- XoneSynthesizedSpeechCfgT and PCSynthesizedSpeechCfgT have been unified into a single structure with
platform-specific elements and renamed to VoipSynthesizedSpeechCfgT
New in this release:
DirtySDK (All)
ConnApi
Added usage of the new VoipGroupControl('self') to inform the underlying voipgroup of the local slot
index in the game.
ProtoStream
Added ProtoStreamOpen2() to allow use of POST requests.
Added minimum buffer concept for callback; if specified, a callback will never provide less than this
minimum amount of data, unless it is the end of the stream.
Added cache of HTTP error response body and added 'serr' selector to return it.
Voip
Added STT/TTS metrics structures, VoipSpeechToTextMetricsT and VoipTextToSpeechMetricsT, which contain
fields used to track usage of the voip accessibility features.
VoipGroup
Added new VoipGroupControl('self') selector to be used by ConnApi to inform the underlying voipgroup of
the local slot index in the game.
DirtySDK (PC,PS4)
VoipTranscribe
Added new module to encapsulate cloud-based transcription (Speech to Text) services for the purpose of
transcribing VoIP audio. This module is fully integrated in DirtySDK VoIP and does not need to be accessed
directly. Configuration of this module happens via a Blaze server configuration. This version supports
local user indices but does not currently support multiple local users.
DirtySDK (PC)
VoipHeadsetPC
Added support for VoipTranscribe module.
Added VoipHeadsetStatus 'sttm', to get the VoipSpeechToTextMetricsT via the passed in buffer.
Added VoipHeadsetStatus 'ttsm', to get the VoipTextToSpeechMetricsT via the passed in buffer.
DirtySDK (PS4)
VoipHeadsetPS4
Added support for VoipNarrate and VoipTranscribe modules.
Added call to sceAudioInIsSharedDevice(), used to replace
sceVoiceGetPortAttr(SCE_VOICE_ATTR_AUDIOINPUT_DEVICE_CAMERA), supplied by the new AudioIn_03 library.
Added silence detection for discontinuous transmission (previously supplied by sceVoice) and transcription.
Added VoipHeadsetStatus 'sttm', to get the VoipSpeechToTextMetricsT via the passed in buffer.
Added VoipHeadsetStatus 'ttsm', to get the VoipTextToSpeechMetricsT via the passed in buffer.
VoipNarrate
Added new module to encapsulate cloud-based narration (Text to Speech) services for the purpose of producing
VoIP audio from text. This module is fully integrated in DirtySDK VoIP and does not need to be accessed
directly. Configuration of this module happens via a Blaze server configuration. This version supports
local user indices but does not currently support multiple local users.
DirtySDK (XboxOne)
VoipHeadsetXboxOne
Added VoipHeadsetStatus 'sttm', to get the VoipSpeechToTextMetricsT via the passed in buffer.
Added VoipHeadsetStatus 'ttsm', to get the VoipTextToSpeechMetricsT via the passed in buffer.
Changes/fixes in this release:
Contrib (PC)
VoipOpus
Changed sampling rate from 8khz to 16khz for improved audio quality, and to match transcription audio input
rate.
Fixed decoder not accumulating into the output buffer, which broke >2p VoIP.
DirtySDK (All)
Base64
Fixed _Base64Encode, which was erroring out if the encoded size plus null terminator would exactly fit the
output buffer size.
CryptEcc
Changed the definition of the number of iterations to allow teams to override it if they choose.
NetConn
Fixed the module startup to assign the global ref after the full startup is complete, this makes it so that
'open' reports correctly.
NetGameDist
Changed the _ProcessPacketType to prevent setting bRecvMulti on the server. bRecvMulti is only meant for
clients to tell if they are in 2-player peer-to-peer games or server based games.
ProtoHttp
Fixed to not abort streaming post on header response if the response is successful (in the 200 range).
ProtoHttp2
Changed the timer to be updated only when creating a new connection, instead of every time we create a new
request. We don't want to artificially update the timer when we have yet to send data. This could cause us to
get stuck in ST_CONN if we try to create new requests quicker than we can timeout.
Changed the send behavior to return zero bytes sent if we don't have space but are not sending a zero sized
payload (stream end). This aligns with how other modules handle similar cases.
ProtoSSL
Fixed an issue processing fragmented handshake packets found when testing TLS1.3 connections to servers
using Facebook's new TLS library ("fizz").
Fixed an issue where a private key file passed in without a signature was misidentified as ECDSA due to an
uninitialized variable in _FindPEMCertificateData. This would cause the key file to fail to load and the
subsequent connection request to fail.
ProtoStream
Changed some debug verbosity levels.
ProtoUpnp
Fixed the handling in cases that we might send zero bytes in a post. In this situation we need to make calls
to ProtoHttpSend to send the remaining data.
ProtoWebsocket
Changed to disable "append header is the same" debug spam at default verbosity, matching the behavior of
other protocols.
Voip
Renamed VoipTranscribedTextReceivedCallbackT to VoipDisplayTranscribedTextCallbackT.
Renamed VoipSetTranscribedTextReceivedCallback() to VoipSetDisplayTranscribedTextCallback().
Changed XoneSynthesizedSpeechCfgT and PCSynthesizedSpeechCfgT to be unified into a single structure with
platform-specific elements and renamed to VoipSynthesizedSpeechCfgT.
VoipCommon
Changed synopsis of 'stot' control selector: iValue parameter used to be enable/disable, it is now local
user index; pValue parameter used to be local user index, it is now enable/disable.
Renamed VoipTranscribedTextReceivedCallbackT to VoipDisplayTranscribedTextCallbackT.
Changed _VoipCommonTextDataCb (callback to handle locally generated transcribed text) to not only send
transcribed text to remote users, but to additionally display it locally if the local user has STT enabled.
Changed implementation to now enable text transcription locally if any local user is requesting text
transcription from remote users.
VoipGroup
Changed implementation of _VoipGroupManagerDisplayTranscribedTextCallback() such that it can now surface
up not only transcribed text from remote users, but also locally transcribed text from local users.
Renamed _VoipGroupManagerTranscribedTextReceivedCallback() to
_VoipGroupManagerDisplayTranscribedTextCallback().
Renamed VoipGroupSetTranscribedTextReceivedCallback() to VoipGroupSetDisplayTranscribedTextCallback().
VoipHeadset
Changed VoipHeadsetDisplayTranscribedText() to be an xboxone only api because all other platforms
had stubbed implementation for it. Also renamed it from VoipHeadsetDisplayTranscribedText() to
VoipHeadsetDisplayTranscribedTextInSystemUI() to avoid confusion with the new
VoipDisplayTranscribedTextCallbackT callback.
DirtySDK (PC)
VoipHeadsetPC
Changed sampling rate from 11.025khz to 16khz for improved audio quality, and to match transcription audio
input rate.
Fixed a crackle and pop issue with PC TTS.
Renamed VoipHeadsetControl('stot') to VoipHeadsetControl('tran') for enabling local transcription.
DirtySDK (PS4)
DirtyErrPS4
Changed to include audio in/out errors.
Changed audio input path from sceVoice to use sceAudioIn, to gain access to the uncompressed voice audio for
the purpose of transcription.
VoipHeadsetPs4
Renamed VoipHeadsetControl('stot') to VoipHeadsetControl('tran') for enabling local transcription.
Removed deprecated SCE_VOICE_EVENT_AUDIOINPUT_MUTE_STATUS enum. It was never used by Sony.
DirtySDK (XboxOne)
NetConnXboxOne
Fixed 'xusr' to early return when an error occurs
ProtoHttpXboxOne
Fixed a memory stomp when terminating our header buffer when the size of the header is larger than that of
the header cache by terminating the source instead of the destination.
UserApiXboxOne/UserListXboxOne
Fixed the module to correctly handle timeout errors. In CL1332066, we added a new recv error code to inform
users that a timeout had occurred. While doing this there were several modules that were not catching this
case.
UserApiXboxOne
Fixed the handling in cases that we might send zero bytes in a post. In this situation we need to make calls
to ProtoHttpSend to send the remaining data.
VoipHeadsetXboxone
Enhanced robustness with new exception handling around the retrieval of the encoder object to be used to
encode locally acquired voice samples. This is added to mitigate the impact of very low-rate prod crashes
reported by NBA.
Changed the handling of "bystanders". Adding bystanders to the chat session is no longer working with recent
XDK/recoveries. As soon as a "bystander" is added to the chat session all subsequent chat session updates
fail. After reporting the issue to Microsoft, we were told that Windows::Xbox::Chat is completely deprecated,
and that we could stop adding bystanders without any risk of certification failures.
Changed VoipHeadsetDisplayTranscribedTextInSystemUI() to support both local and remote originators for
transcribed text.
Renamed VoipHeadsetControl('stot') to VoipHeadsetControl('tran') for enabling local transcription.
EADP Game Services DirtySDK 15.1.4.0.4 - October 29, 2018
This SDK release was built using the following compiler packages:
EA Config 5.07.00
Framework 7.10.00
Android AndroidSDK 26.0.2-2
AndroidNDK r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.07.00
Kettle kettlesdk 5.508.071-proxy
kettle_config 2.09.00
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
ProtoHttp2
Added support for checking if an idle connection is still active to prevent any unwanted issues if the
server silently goes away.
Changes/fixes in this release:
DirtySDK (All)
ConnApi
Fixed a bug introduced in the context of GOSREQ-1975 (Refactored the DirtyCast/nonDirtyCast dedicated
server divergent code paths). To align with the DirtyCast implementation, the conn index passed to
VoipGroupConnect() is being decremented by 1 to save the spot unnecessarily used by the voipserver
in the voip sub-system (because there is no voipconnections to the voipserver itself). But the
call to VoipGroupControl('vcid') was not tailored in the same manner. It now is.
DirtyCert
Fixed deadlock when disconnecting from the redirector and updating at the same time by not waiting on the
module crit when updating. Given that the window that this can occur is rare, we can just try the lock in
the update case to prevent deadlocking in the future.
DirtyNet
Fixed logic used to decrement pPacketQueue->iPacketTail in SocketPacketQueueAllocUndo(). Upon an underflow
resulting from decrementing the tail when it is 0, the logic proved to only work when
pPacketQueue->iMaxPackets was a power of two. After the fix, the logic works for any value of
pPacketQueue->iMaxPackets.
ProtoHttpManager
Fixed the update so that we can process idle protohttp refs. ProtoHttp requires that we allow it to do idle
processing to handle connection wide events.
VoipGroup
Removed an early return in VoipGroupConnStatus and VoipGroupRemoteUserStatus which hid the correct status
information when a suspended connid is queried.
DirtySDK (PC)
VoipOpus
Fixed the accumulation of the output buffer as required by the voip mixer. Before if we received multiple
voice bundles we would only write one.
DirtySDK (PS4)
DirtyWebApiPS4
Fixed a crash if initialization fails by checking for NULL and configuring the thread life correctly.
EADP Game Services DirtySDK 15.1.4.0.3 - August 24, 2018
This SDK release was built using the following compiler packages:
EA Config 5.06.00
Framework 7.10.00
Android AndroidSDK 26.0.2-2
AndroidNDK r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.03.00
Kettle kettlesdk 5.008.071-proxy
kettle_config 2.06.03
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
VoipGroup
Added a selector to get the mute all status from the voipgroup.
QosClient
Added a new error code QOS_CLIENT_REQUEST_STATUS_ERROR_TIMEOUT_PARTIAL so we can distinguish a qos test
that wasn't successful getting any probes round trip, vs one that was at least partially successful.
Changes/fixes in this release:
DirtySDK (All)
ConnApi
Fixed a crash if we try to abort demangling on xbox one when we are not currently demangling.
DirtyNet
Fixed size of internal structure (HostentT::name[]) used during DNS name lookup: increased size from 64
bytes to 256 bytes to support recent scenarios involving names longer than 64 chars. The maximum DNS name
length is 253 characters
ProtoHttp2
Fixed the 31-bit value parsing/decoding that caused incorrect behavior in the module. When decoding the
stream id and window update increments we were masking out the high bit after shifting instead of before,
which caused to get incorrect values.
QosClient
Fixed a potential issue where resources would not be freed on SocketLookup failure.
Enhanced error checking, so that received data is at least the size of a probe before processing it.
VoipCommon
Enhanced error handling around VoipHeadsetCreate()
VoipGroup
Changed the code to ignore mute all if it has already been done.
DirtySDK (iPhone/OSX)
ProtoSSLApple
Fixed being stuck in a bad state when an error occurs in setup by cleaning up the secure state in those
instances.
DirtySDK (PC)
VoipOpus
Changed the default for opus to use the built in voipcodec vad support to help with stuttering.
DirtySDK (PS4)
NetConnPS4
Removed the code terminate the UserService as this uninitentially left in. When we still supported
disabling IEAUser, we needed to use the user service to work how our legacy code worked.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Fixed a crash in the suspend handler by refactoring the code to more careful in how we signal the invalidity
of the xmlhttp requests.
VoipHeadsetXboxone
Fixed possible crash conditions upon VoipHeadsetDestroy() being called from within VoipHeadsetCreate().
EADP Game Services DirtySDK 15.1.4.0.2 - July 12, 2018
This SDK release was built using the following compiler packages:
EA Config 5.06.00
Framework 7.10.00
Android AndroidSDK 26.0.2-2
AndroidNDK r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.03.00
Kettle kettlesdk 5.008.071-proxy
kettle_config 2.06.03
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
UserApi
Added a new selector 'rrsp' to disable UserApi from returning First Party raw response.
DirtySDK (PC)
VoipHeadsetPC
Added Text-to-Speech functionality. You can now use the 'ttos' selector to send text as voice.
Changes/fixes in this release:
DirtySDK (All)
CommUdp
Fixed the calculation of the packets we can fit in the buffer to account for the encoded subpacket size to
prevent prototunnel rejecting our packets.
ConnApi
Fixed crashes when creation of the protomangle ref fails on XboxOne by guarding calls to that module.
NetGameDist
Fixed _SetDataPtrTry to correctly identify uIndexB when we are looking at the server outbound queue.
ProtoHttp
Fixed failure to invoke the write callbacks with data when we received but have not processed the whole
chunked response.
ProtoTunnel
Fixed to not rematch on an OUTOFORDER decrypt result, which causes a stream desync and the connection to
fail.
QosClient
Fixed bug where in some error conditions a protohttp2 stream would be leaked.
Increased the logging level on protohttp2 used by QoS2.0 to potentially give insight into if the coordinator
is not responding to the client sending results.
DirtySDK (PS4)
ProtoHttpPs4
Fixed failure to invoke the write callbacks with data when we received but have not processed the whole
chunked response.
Fixed no content length downloads to properly calculate the body size when the download is complete.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Fixed the write callback from not processing due to not correcting assessing if we have read the entire body
by tracking the amount read.
Fixed the processing of the kill list to allow for killing requests not yet in the in-progress state.
ProtoMangleXboxOne
Fixed a crash if there is a template load failure by moving the creation of the incoming security
association vector earlier.
UserApiXboxOne
Fixed the ability to fetch 100 profiles at a time by increasing the json buffer to 2048.
VoipHeadsetXboxOne
Fixed incorrect usage of the chat session in a scenario where the chat session creation previously failed.
Fixed incorrect inbound queue management in _VoipHeadsetProcessInboundQueues().
Fixed incorrect expection handling in _VoipHeadsetReputationQuery() that might cause a crash.
EADP Game Services DirtySDK 15.1.4.0.1 - June 1, 2018
This SDK release was built using the following compiler packages:
EA Config 5.06.00
Framework 7.10.00
Android AndroidSDK 26.0.2-2
AndroidNDK r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.03.00
Kettle kettlesdk 5.008.071-proxy
kettle_config 2.06.03
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
DirtyNet
Added SocketPacketQueueAllocUndo() to be used to "undo" a recent call to SocketPacketQueueAlloc().
Added calls to SocketPacketQueueAllocUndo() in scenarios where the previous call to
SocketPacketQueueAlloc() needs to be undone because the allocated resources ended up not being used,
i.e. when WSARecvFrom() fails and when WSAGetOverlappedResult() fails.
DirtySDK (PS4)
ProtoHttpPS4
Added the 'ratr' and 'rats' selectors to the implementations for parity with the stock version of protohttp
Added ProtoHttpControl('mwrk') selector to control the maximum number of worker threads ProtoHttp will spawn.
Defaults to 0 to that the current behavior will not change unless the user changes this value.
Refactored the call to sceHttpSendRequest() to optionally be called in its own thread.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Added the 'ratr' and 'rats' selectors to the implementations for parity with the stock version of protohttp
Changes/fixes in this release:
DirtySDK (All)
ConnApi
Restored the NetGameDistStatus('mplr') selector which will not account for the server index.
Refactored the ConnApiStatus('gsrv') selector to merge two different implementations. This
will now always return TRUE if the game is server hosted and FALSE otherwise, and if a buffer is
provided it will copy the server's ConnApiClientT there.
NetConn
Fixed the return code from NetConnCommonStartup when NetConn has already been started.
NetGameDist
Fixed incorrect "wraparound" logic for the OutBufData queue. This CL is fixing two things with the function
_SetDataPtrTry() which is used to identify where to write data into the respective ring buffers associated
with inbound and outbound queues.
#1 When used with OutBufData, the function was incorrectly initializing uIindexB with "OutBufData.iBeg"
instead of "InpBufData.iBeg+iIOOffset"... thus opening the door for overwriting the "pending entries"
when the queue is close to filling up.
#2 The iPosB variable was being initialized without considering whether uIndexB was pointing to a
"valid" entry or not... potentially resulting in the code executing with a busted iPosB
(specific to empty queue scenarios)
Refactored NetGameDistMultiSetup to not automatically remove 1 from the index on the clients. This offset
shall be performed by the user.
ProtoSSL
Fixed a bug introduced in Raven.0 skipping a certificate that is not a part of chain.
Fixed a bug introduced in Raven.0 where the client did not correctly handle a server downgrade when
formulating the ClientKeyExchange PreMasterSecret, triggering a downgrade detection on the server and
causing the server to fail the connection with a bad record mac alert.
QosClient
Fixed a bug, when compiling without logging, a timer variable would not be reset resulting in a spam of
callbacks reporting the Qos procedure has timed out.
Added a way to get module hResults from the callback structure QosCommonProcessedResultsT or via
QosClientStatus('hres').
QosCommon
Fixed building qoscommon so that we don't need to keep adding #ifdefs for new platforms to use strtok.
VoipConnection
Fixed an issue where the local client id was not being treated consistently in _VoipReliableDataUnpackDATA.
This led to Speech-To-Text data not being displayed in some cases.
VoipTunnel
Fixed the suspend logic so that if we are removing a suspended game at the end of the list we would clear
it out correctly. If we were to remove suspended data at the end and suspend logic hits later at the same
slot, the voiptunnel would incorrectly error because it believes there is already a game suspended there.
DirtySDK (iPhone/OSX)
ProtoSSLApple
Fixed an issue where we incorrectly don't process the received data when receiving a FIN in the same packet.
How the processing works we can make many read calls off the socket before the data gets returned back to
the caller. In the case that we get data and FIN, we just see this as the peer closing the connection.
Instead of doing it in this way we should always first process any data we received.
DirtySDK (PC)
DirtyNetWin
Enhanced tracking of pSocket->bRecvInp such that it gets flagged before WSARecvFrom is attempted. The goal
is to eliminate a theoritical race condition identified during code review: bRecvInp is checked in
SocketRecvFrom() which can be invoked from the main thread... and thus that opens the door for a race
condition with the socket recv thread updating that variable too late (after the call to WSARecvFrom().
NetConnWin
Fixed the cleanup when socket creation fails during NetConnStartup().
DirtySDK (PS4)
ProtoHttpPS4
Fixed the header parsing for large headers by using the input pointer to the `sceHttpGetAllResponseHeaders`.
In the parse header code we check if we have the entire header to allow us to continue parsing. If the
header is too large, we truncate the headers and the parse header function will always early return,
attempting to wait for more data.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Fixed overallocating memory when receiving large responses from the server by resetting the offsets when the
entire buffer is read.
Fixed the logic so that we could kill any requests that we know will no longer receive callbacks. In
conditions such as suspend and disconnects we have observed that no callbacks will be fired which leaves
requests in XMLHTTP_STATE_INPROGRESS. This has the effect of leaving netconn in the ST_CLEANUP state while
waiting for the kill list to be cleared of all requests, which blocks NetConnConnect from connecting to the
first party network.
ProtoMangleXboxOne
Fixed the crash when template fails to load by failing the creation of the module, it will try to continue
without demangling at the higher levels.
Removed the concept of secure bypass which is not being used.
UserApiXboxOne
Fixed a crash when trying to parse the profiles response by ensuring that we received any data. If we didn't
receive any data it could mean that we had something misconfigured or that server just returned an error to
us. We should not have assumed that we would always have data waiting.
EADP Game Services DirtySDK 15.1.4.0.0 - March 28, 2018
This SDK release was built using the following compiler packages:
EA Config 5.06.00
Framework 7.10.00
Android AndroidSDK 26.0.2-2
AndroidNDK r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.03.00
Kettle kettlesdk 5.008.071-proxy
kettle_config 2.06.03
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
*** Important - This release has not been tested with Xbox February XDK and Sony PS4 5.5 SDK ***
Official support for the newer February XDK and PS4 5.5 SDK will come in the next release.
*** Important - This is the first release of Qos2.0 ***
QosApi has been replaced with QosClient for Qos2.0. E-mail GS-Operations@ea.com to have a custom Qos profile
setup for your title, it specifies which ping sites to use, and what tests it should conducted.
New in this release:
DirtySDK (All)
CryptBn
Added a debug function to log the big number.
Added Added CryptBnByteLen to return number of bytes currently used by the big number.
CryptChaCha
Added ChaCha20-Poly1305 AEAD cipher implementation.
DirtyCert
Changed redirector endpoint name to gosca18.ea.com
Changed to add support for using port 44326 for DirtyCert on Xbox One.
DirtyErr
Added DirtyErrDecodeHResult which can split an hResult value into its component pieces, to better
understand what it represents.
ProtoSSL
Added TLS1.3 support. Default requested version remains TLS1.2, so TLS1.3 connections are not attempted
without being explicitly enabled.
Added DigiCert Global Root CA for EA-signed secure public endpoints (used in place of Symantec/VeriSign).
Added ECDSA support, including private key parsing, cipher suites, server and client certificates, and
signature algorithms for TLS1.2 and 1.3.
Added support for TLS_CHACHA20_POLY1305_SHA256 (TLS1.3), and TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
and TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (TLS1.2) cipher suites.
Added support for RSA-PSS client and server certificates.
Added ability for ProtoSSLControl 'scrt' control selector to pass in full .pem files with signatures not
already stripped. If no signature is present PKCS#1 is assumed, retaining previous functionality.
Added ProtoSSLStat('ladd'), selector. Is used to return a cached local client address, that was used
for the last connection. The address is copied into pBuffer, which must be at least sizeof(struct sockaddr)
QosClient
Added the new module QosClient, a part of the Qos2.0 system, it replaces all functionality of previous QosApi.
Qos2.0 manages the whole Qos process from start to finish, this management had been done by BlazeSDK in the
past. The basic usage of the QosClient module would be; call QosClientCreate() to initialize, regularly
call QosClientUpdate(), call QosClientStart() and wait for its callback with results. Look at the in code
documentation for additional details.
DirtySDK (XboxOne)
UserListApiXboxOne
Added support for 409 (Rate Limited) response code.
Changes/fixes in this release:
DirtySDK (All)
ConnApi
Fixed size of dynamically allocated module ref. An unused client entry was always unnecessarily allocated
at the very end of the struture.
Removed the concept of the GameServer in ConnApi. This was only used for DirtyCast servers, which will now
be located at index 0 of the client list the same way it is for nonDirtyCast servers.
Removed 'mplr' control selector, which was deemed unneeded.
Removed the XBox One 'phxc' control selector, and replaced it with a generic 'gsrv' selector. This indicates
whether the host is a dedicated server or a console.
Refactored ConnApiControl('gsrv') usage for the new functionality.
Removed ConnApiControl('gsv2') .
Removed the gameflags and associated parameter in ConnApiConnect, this is leftover from Xenon.
CryptBn
Changed the CryptBnInverseMod function to be implemented using binary extended gcd. This new algorithm is
much faster than extended euclidean. The new algorithm is explained in the Handbook of Applied Cryptography
Chapter 14.4.3 (14.61).
Changed the CryptBnMod algorithm to skip trying to reduce or left shift until we have at least incremented
the number once. In our profiles we noticed that there was a lot of wasted time in the reduction checking
when the result was still zero.
CryptEcc
Optimized the point calculations in _CryptEccPointCalculate by multiplying over the modulus. Doing this
makes it so the final redunction happens on a smaller number.
Fixed the ECDSA sign and validation when the hash's bitsize is larger than the bitsize of the curve. Based
on the algorithm, when the bitsize of the hash is larger than the order of the curve the hash shall be
truncated.
Changed the ECDSA signing to be done given the new private key parameter. The private key used previously
was the wrong one and caused the validation to fail on the peer's end.
DirtyCert
Addressed a TODO to close the connection instead of abort when the work is complete.
DirtyErr
Changed the parameters to DirtyErrGetHResult(), so the sizes of the fields provided more accurately
represent the size of what is internally stored in the hResult.
DirtyNetUnix
Added the missing thread termination signal
JsonFormat
Addressed a TODO to use ds_timetostr instead of implementing it inline.
NetGameDist
Improved readability of code by renaming some variables.
NetGameDistServ
Fixed some coding standard issues in the module's InputQueryMulti and InputLocalMulti functions.
ProtoHttp2
Changed the frame size clamp macro to call DS_CLAMP.
Removed half-implemented proxy support until a time when we find a h2 proxy that supports CONNECT.
ProtoTunnel
Fixed a bug where a packet that could not be decrypted and had a negative stream offset could cause the
tunnel connection to be reset, breaking the stream. This fix includes changes to clarify behavior that
was previously difficult to ascertain without a very close inspection of the code:
ProtoSSL
Changed to disable RC4-MD5 cipher suite and SSLv3 by default.
Changed to enable ECDHE cipher suites by default.
Changed the certificate loading to use Base64Decode2. The implementation was assuming that Base64Decode
returned the amount of data needed in the output but in fact it just returns TRUE or FALSE. The
Base64Decode2 function returns the result that it intended to get.
Changed cipher preference order to be more in-line with current practices.
Changed signature schemes/algorithms preference order to be more like boringssl.
Changed execution of TLS1.3 handshake key generation in RecvServerHello, and signature verification in
RecvServerKeyExchange and RecvCertificateVerify to be async (blocking in smaller increments).
Changes to simplify certificate parsing and make it easier to read and follow, with a fix and two minor
functional improvements;
- fixed issue observed from inspection of skipping a cert that is not part of the chain not working
for tls1.3, due to the extensions field not being skipped
- moved validation bypass to be immediately after certificate parsing, before date validation
- moved leaf cert caching and cached cert bypass into block specific to parsing the leaf certificate,
simplifying main loop
Changed signature scheme and cipher selection to account for certificate signing algorithm, if a
certificate is available.
Changed to allocate certificate and private key buffers internally when using 'scrt' and 'skey' control
selectors, meaning these buffers no longer need to be persisted by the caller.
Changed signature verify buffer from 2048 bytes to SSL_SIG_MAX.
Changed signature verify failure alert from bad_record_mac to decrypt_error, as OpenSSL does.
Fixed ECDHE/SHA1 ciphers for TLS1.0/TLS1.1, and enabled them for those versions.
Fixed an issue with AES decrypt when a padding failure was detected, returning an immediate error instead
of resulting in a bad_record_mac alert as intended.
Fixed an issue in _ProtoSSLGenerateSecret() where the size of the PreMasterKey buffer (48) was being used
to build the master secret instead of the key length, which is not always 48.
Fixed a bug in RecvCertificateVerify in TLS1.3, which was dependent on the ECC context being left
initialized with the proper curve by RecvCertificate.
Fixed to not send signature_algorithms extension for connection attempts with a TLS version less than 1.2.
Fixed 'rsao' operator to cover new async crypto states, renamed 'crpt', and marked 'rsao' for deprecation.
Fixed a server issue processing the ChangeCipherSpec message.
Fixed a server bug from Raven-pr2 where the signature_algorithms extension would be sent in the ServerHello
by a TLS1.2 or earlier server, which is not legal.
Fixed a server bug that broke resume flow in tls1.2 and prior when tls1.3 server hello session echo was
implemented.
Fixed the server to select cipher based on session resume cipher if available, and to not attempt resume if
the ssl version or cipher of the previous session don't match those of the current session.
Fixed a server bug in ProtoSSLUpdateSendServerKeyExchange(), which was leaving bRSAContextInitialized TRUE.
This would cause a subsequent client certificate verify operation to fail.
Fixed a server bug when receiving a tls1.3 ClientHello but negotiating a tls1.2 or prior connection with an
ECDHE cipher; the key from the key_share extension would be used when sending the server key exchange,
causing the connection to fail.
Fixed server bug when verifying an ecdsa client certificate; the state was left initialized, which broke
subsequent encryption of Finished message.
Fixed SendCertificateRequest to transition to sending Certificate message when TLS1.3 is used.
Fixed RecvCertificateRequest to choose signature scheme in concert with certificate signing algorithm, if a
certificate is available.
Fixed SendFinished to transition to RECV_HELLO state if TLS1.3+server+client cert flow.
Fixed SendServerKeyExchange and RecvCertificateVerify for TLS1.1+server+rsa|ecdsa.
Fixed RecvCertificate to transition to RecvFinished if a TLS1.3 server receives an empty Certificate
message, and the client cert level is not two (client cert required).
Fixed SendCertificate to transition to SendFinished if a TLS1.3 client sends an empty Certificate message,
skipping CertificateVerify.
ProtoPing
Moved this module to the LegacyDirtySDK.
ProtoPingManager
Moved this module to the LegacyDirtySDK.
ProtoUdp
Moved this module to the LegacyDirtySDK.
ProtoUpnp
Changed the implementation to switch from using ProtoUdp to DirtyNet for UDP communication.
QosApi
Moved this module to the LegacyDirtySDK.
VoipGroup
Changed the VoipGroupManager to contain a variable length array of voipgroups. In multihub mode we require
more voipgroups due to the number of concurrent blazehubs running.
VoipTunnel
Refactored indexes for voip clients lists were offset by -1 so that the first console user in the list
would appear at index 0 of the voip client list. This helps to not waist one of the maximum 32 voip slots.
XmlFormat
Removed XmlValidate debug function that was never implemented. This fixes an outstanding TODO we had to
implement this functionality.
DirtySDK (Android)
CryptRand
Changed the Android implementation to read from /dev/urandom. This addresses an outstanding TODO we had to
add a native implementation for this platform.
DirtySDK (Linux)
DirtyNetUnix
Fixed the idle procs not being called when running in singlethreaded mode.
DirtySDK (macOS/iOS)
NetConnIos
Switched the implementation to use the non-deprecated Base64Decode2.
ProtoSSLApple
Enabled support for ECDSA and CHACHA20-POLY1305 ciphers.
DirtySDK (PC)
DirtyNetWin
Changed the implementation of 'poll' to fire the socket callback when we have data waiting. The previous
implementation would just notify that is a socket is waiting but would need to wait for the socket idle
thread for the socket callback to be invoked.
DirtySDK (PS4)
DirtyLibPS4
Removed support for singlethreaded mode on PS4, this isn't a supported configuration. The implementation was
taken from unix when it was created.
ProtoHttpPS4
Fixed a write callback bug when all data is available immediately, in which case the write callback
completes the transition before the data can be read.
VoipHeadsetPS4
Fixed size of dynamically allocated module ref. An unused client entry was always unnecessarily allocated
at the very end of the struture.
DirtySDK (Unix)
NetConnUnix
Fixed bug (opt build only) inadvertently introduced in Raven-pr2. Body of _NetConnUpdateConnStatus() was
incorrectly made "logging only" by conditionnally compiling it in with DIRTYCODE_LOGGING but that broke
the functionality because the line "pRef->uConnStatus = uNewConnStatus" is not only for logging purposes
but is core functionality for internal state transitions.
VoipUnix
Changed voipunix to assume single-threaded usage: eliminates run-time threading issues (malformed
prototunnel packets) resulting from voipunix being used from the dirtycast stress client which implies
disabled critical sections.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Fixed the ProtoHttpAbort behavior on XBox One to be similar to other platforms.
Fixed a write callback bug when all data is available immediately, in which case the write callback
completes the transition before the data can be read.
ProtoMangleXboxOne
Fixed size of dynamically allocated module ref. An unused client entry was always unnecessarily allocated
at the very end of the struture.
VoipXboxOne
Fixed copy and paste error, the code was set to set the priority and not the affinity.
EADP Game Services DirtySDK 15.1.4.0.0-pr2 - February 5, 2018
This SDK release was built using the following compiler packages:
EA Config 5.06.00
Framework 7.10.00
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.03.00
Kettle kettlesdk 5.008.051-proxy
kettle_config 2.06.02
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
ProtoHttpServ
Added ability to specify ALPN string for ProtoSSL.
ProtoSSL
Added support for rsassa-pss signed certificates.
Added support for draft22 and draft23 versions of TLS1.3.
Added client support for TLS1.3 session resumption.
Added safe reading for handshake receive functions and extension parsing.
Added client certificate support for TLS1.3.
QosApi
Added QosApiControl('stwi') - set the amount of ms before a stall is counted, if a stall is detected test
timeout will be extended (default 500ms).
UserListApiPS4
Added order directions for list queries
Changes/fixes in this release:
DirtySDK (All)
Build
Fixed the build scripts to correctly set the optionset for C++ files when building as a DLL.
ConnApi
Removed the empty ConnApiMigratePlatformHost function.
DirtyNet
Changed the implementation of the map address functions to return only -1 in error as negative numbers are
expect for real (non-virtual) IPv4 addresses. We do not want to return error when remapping an IPv4 address.
Changed the implementation of the remap address function to handle the case an IPv4 address was tried to be
remapped.
Fixed SockaddrInSetPort to not generate constant value truncation warning on Windows builds.
Hpack
Fixed crash in _HpackDecodeLiteralField if the indexed entry decode failed by stopping further processing.
Fixed crash in _HpackHuffmanTreeDecode if the huffman code lookup in the tree failed.
NetGameDist
Fixed parsing of the stat packet to prevent reading past the end of the buffer. The module reads and writes
to the stat packet based on the number of players. On the client this is a fixed value, while on the server
this is adjusted based on when players join and leave the game. Due to a mismatch between the both sides,
the server will write less than the client expects causing it to potentially read past the end of the
buffer.
Protobuf
Fixed reading and writing of non-packed repeated fields. When this was originally implemented, how I
understood the encoding documentation is that with proto3 all repeated fields were packed, which was
incorrect. How it actually works is that the primitive types (varint, 32-bit and 64-bit) are packed while
length delimited types are not. Due to this I needed to make a change in the APIs so it can account for the
behavior change in the implementation.
Refactored the functions dealing with reading packed repeated fields to be a bit more elegant to use.
Removed the output sizes for the fixed type functions (non-repeated) as this is implicit based on the
function.
Removed the unnecessary fixed writing functions at align with the reading size.
Refactored the error checking based on the expectations for each fixed function.
ProtoHttpUtil
Changed ProtoHttpUrlEncode functions to return the append point rather than always returning zero. Also
changed to mirror C99 vsnprintf() overflow semantics.
ProtoSSL
Fixed crash when parsing ASN.1 binary objects by preventing a negative size when zero sized data is parsed
from the header.
Fixed a memory leak when CryptRSAInit fails when verifying the signature and the context is heap allocated.
Removed support for md2-signed certificates.
Fixed a bug in sending of TLS1.3 HelloRetryRequest by server.
Fixed a bug receiving 0/n record split records introduced in Raven-pr1.
Fixed SendCertificateVerify to work with PSS encoded signatures when using TLS1.2. PSS signature support
was added along with TLS1.3 in Raven-pr1, which exposed the lack of support.
Fixed to increase ClientHello body format buffer to 2k to accomodate large session tickets in TLS1.3
resume flow.
Fixed to prevent ProtoSSL running as a server using DirtyCert.
Fixed two bugs introduced in DirtySDK 13.3.1.6.0 when code to check AES padding was added. First, in SSLv3
the block cipher padding value is not specified and therefore should not be checked. This would likely
break any SSLv3 connection negotiated with AES. Second, the padding check itself was biased one character
forward, meaning it missed checking the very first padding byte, instead comparing the last byte (the
length) to itself.
Fixed to support the full 64 bits of sequence number (previously, only 32 bits were supported).
QosApi
Changed http and probing timeouts, so they are treated separately and have their own error codes.
Fixed issue when the client stalls, it was possible to timeout without having had a chance to do the
probing. QosApi will detect client side stalls and will increase the timeout to compensate.
Changed QosApi to reject latency packets that are well beyond expected ranges, 20 seconds.
DirtySDK (Apple)
ProtoSSLApple
Changed the code to cleanup the secure state when we detect that the connection was closed.
DirtySDK (XboxOne)
UserApiXboxOne
Fixed a crash due to the UserApi ref being created before users are added to NetConn by creating
ProtoHttp refs for all possible users.
VoipHeadsetXboxOne
Changed the LoadLibraryEx input to be wrapped with a TEXT macro to ensure it works on non-UNICODE
environments.
EADP Game Services DirtySDK 15.1.4.0.0-pr1 - December 7, 2017
This SDK release was built using the following compiler packages:
EA Config 5.06.00
Framework 7.08.02
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 170608-proxy
capilano_config 2.03.00
Kettle kettlesdk 5.008.051-proxy
kettle_config 2.06.02
iPhone ios_config 1.09.00
iphonesdk 10.0-proxy-1
OSX UnixGCC 0.10.00
osx_config 1.15.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
*** Important - First DirtySDK release with Speech-To-Text (STT) and Text-To-Speech (TTS) support ***
Support available for XboxOne only. PS4 and PC not yet supported
*** Important - PS4 Random module required ***
With this version loading of the PS4 Random module is required
*** Important - Public API changes for NetConnXboxOne ***
Removed support for -nologin parameter with NetConnStartup() and NetConnConnect().
*** Important - Public API changes for NetGameDistServ ***
Removed the notion of a "started" game as it proved to be completely broken. NetGameDistServStartGame() and
NetGameDistServStopGame() were removed. When a game is started or stopped (like during a blaze match replay), the
game code running on the client is in charge of exercising the netgamedist flow control.
*** Important - Public API changes for Voip ***
Removed for good 'umic' and 'uspk' control selectors that had been deprecated for a long time already.
New in this release:
DirtySDK (All)
Base64
Added support for base64 url string encoding and decoding per RFC 4648 Section 5. Added new
internal functions to do the encoding / decoding to be shared between the various functions.
Build
Added a target for building full html docs.
CommUdpUtil
Added as a new file where code shared between commupd and dirtycast is located. Contains new util
functions with explicit names that improve readability and hide bit/byte level inspection in
commudp packets.
CryptBn
Added functions to left and right shift by more than 1 bit at a time. Defined a macro for right shift by 1
to mimic how left shift works.
CryptEcc
Added a function to the module to validate if a point is on the curve.
Added support for ECDSA signing and verification which can be used instead of RSA for those purposes.
CryptRSA
Added support for Chinese Remainder Theorem (CRT) algorithm to speed up RSA operations that use the private
key. Since the data and sate used for the different RSA computations are different, I introduced a union
that can represent the data we are working with.
DirtyNet
Added a minimum rate limit of 1460 bytes/sec to the SocketRate API. This also fixes the issue that
setting a rate lower than this will result in no data going through.
Added support for IPv6 address parsing from text.
DirtyThread
Added support for condition variables via the new dirtythread module which is powered by EAThread.
Added support for threads via the new dirtythread module which is powered by EAThread.
NetGameDistServ
Added a call to _NetGameDistServFlowControl() in NetGameDistServAddClient() such that a player
joining results in DirtyCast announcing "I no longer receive" until the joiner explicitly confirms
"I can receive" with a call to NetGameDistControl('lrcv').
NetGameLink
Added the number of naks sent to peer from us to the NetGameLinkStatT structure.
Moved 'slen' and 'sque' to be a status selector. We are keeping the control selector version of
these but they are now consider deprecated.
Platform
Added include to <wchar.t> to provide access to wchar_t
Protobuf
Added a reader and writer for the protobuf (version 3) wire format.
ProtoHttp
Added secure proxy support using HTTP CONNECT.
Added global proxy setting via new 'gpxy' ProtoHttpControl selector.
Added an additional request API to specify custom and receive header callbacks, which take priority over the
global callbacks.
ProtoHttpServ
Added a listen function to allow users to specify their own TCP backlog settings.
ProtoSSL
Added TLS1.3 protocol support, implementing draft-18 through draft-21 versions at compile-time (defaulting
to draft-18). TLS1.2 remains the default client-requested version.
Added support for sha512 handshake hash.
Added debug output of Master Secret in a form suitable for Wireshark decryption via (Pre)-Master Secret log
file.
ProtoWebSocket
Added message sending (ProtoWebSocketSendMessage) and receiving (ProtoWebSocketRecvMessage). Already
existing Send/Recv functions use a stream-like metaphor.
QosApi
Added QosApiControl('ncrt') - passed to ProtoHttpControl, if TRUE will proceed even if SSL cert errors
are detected (defaults FALSE), for debug purposes.
Added QosApiStatus('ncrt') - get the 'ncrt' setting, if TRUE we will ignore SSL errors for setup
communication.
Added QosApiControl('soli') - passed down to the socket as a SO_LINGER option if its >= 0, a 0 value
will abort the socket on disconnection with no TIME_WAIT state (ideal for stress testing).
Added QosApiStatus('soli') - get the value passed to ProtoHttp 'soli'.
Voip
Added VoipSetTranscribedTextReceivedCallback() for voipgroup layer to register a callback used by
lower-level voip to notify about inbound transcribed text over voip connections.
VoipConnection
Added a per-connection outbound sequence number instead of the global one, needed to support a
scenario where transcribed text is not sent on ALL connections.
Added a NULL check when setting bPeerIsAcking as based on code before it pConnection might be NULL.
VoipDef
Added XoneSynthesizedSpeechCfgT to be used with VoipControl('voic').
Added VoipTranscribedTextReceivedCallbackT which is the prototype of the callback registered with
VoipSetTranscribedTextReceivedCallback() and VoipGroupSetTranscribedTextReceivedCallback().
VoipGroup
Added VoipGroupSetTranscribedTextReceivedCallback() for game code to register a callback used by
DS to notify about inbound transcribed text over voip connections.
VoipPacket
Added new VOIP_PACKET_STATUS_FLAG_STT, flagging that at least one user on the originating side as requested
transcribed text to be sent.
Added aRemoteClientId field to ReliableDataInfoT. Required to uniquely identify who the reliable data is
for.
VoipTunnel
Added new events for adding and deleting games from the VoipTunnel.
VoipHeadset
Added VoipHeadsetDisplayTranscribedText() to display transcribed text in system overlay.
DirtySDK (Apple)
DirtyErrUnix
Added the errors from Apple's Security.framework headers SecBase.h and SecureTransport.h
ProtoSSLApple
Added an implementation of ProtoSSL that is driven by Apple's SecureTransport library.
DirtySDK (PC)
DirtyNetWin
Added SocketControl('soli') - set SO_LINGER On the specified socket, iData1 is timeout in seconds.
Added support for IPv4 sockets, required for Windows XP compatibility. Use SocketControl('afam') control
selector to set global address family to use for sockets.
VoipAux
Added support for the Opus VoIP codec. This codec uses the default settings and 8kHz sampling rate.
VoipHeadsetPc
Added support for variable length frames for PC codec's which is needed to add Opus support. To allow the
codec to choose if it can support variable length frames, have the headset status fallthrough down to the
codec. Due to the current codecs not supporting variable length frames, I put the unhandled logging message
at a higher verbosity to prevent spamming. Changed the voice data callback to only validate the size of the
frames when not using variable length frames. Changed the calculation of sub-packet size to work for both
variable and fixed frames.
DirtySDK (PS4)
DirtyNetPS4
Added support for SO_LINGER socket option via the 'soli' control like on PC/Unix
NetConnPS4
Added NetConnStatus('locl') and NetConnStatus('locn') API to fetch locale.
Added support for -delaySEMD in NetConnStartup to ignore the state of SystemEventMessageDispatcher.
ProtoHttpPS4
Added rate limiting.
DirtySDK (Unix)
DirtyNetUnix
Added SocketControl('soli') - set SO_LINGER On the specified socket, iData1 is timeout in seconds.
VoipUnix
Added as a new file. Not real voice. Artificial voip data injection on voip connections. Injected
sub-packet rate and sub-packet size are controllable via voip control selectors ('psiz', 'prat').
DirtySDK (XboxOne)
UserApiXboxOne
Added support for retrieval of the TTS/STT settings that are a part of the profile data.
Added Accessibility field to UserApiProfileT.
VoipHeadsetXboxOne
Added support for leveraging new Text-to-speech (TTS) and Speech-to-text (STT) features in XboxOne XDK.
* Added 'ttos' control selector to be used by the game code to feed in text to be synthesized (from
a speech-impaired user).
* Added 'stot' control selector to be used by the game code to enable local generation of transcribed
text to be sent reliably to all remote peers that requested it (i.e. hearing-impaired user).
* Added 'voic' control selector with platform-specific params used for identifying "voice" used when
producing synthesized speech.
VoipSerializationXboxOne
Added "game display name" property to the remote user object because we need to feed that into.
Windows::Xbox::UI::Accessibility::SendSpeechToTextString(). So that information is now part of the
user serialization.
API Breaking Changes in this release:
DirtySDK (All)
Build
Removed support for non-namespaced include imports, you must use the full path.
For example: <DirtySDK/dirtysock/dirtynet.h> versus <dirtynet.h>
CommTcp
Removed CommTCP for good.
ConnApi
Renamed 'phcc' selector (PC Host Capilano Client) to 'phxc' (Pc Host Xboxone Client). ('phxc' used to
stand for "PC Host Xenon Client" but it was free now that xbox360 is no longer supported.)
Removed the option of using ConnApi as the owner of voip. Calling VoipStartup/VoipShutdown is now ALWAYS
required before using ConnApi with voip-enabled topologies.
DirtyLang
Removed LOBBYAPI_LANGUAGE_TEGULU, which was replaced with LOBBYAPI_LANGUAGE_TELUGU long time ago.
Removed LOBBYAPI_LANGUAGE_UIGUR, which was replaced with LOBBYAPI_LANGUAGE_UIGHUR long time ago.
Removed LOBBYAPI_LANGUAGE_WELCH, which was replaced with LOBBYAPI_LANGUAGE_WELSH long time ago.
Removed LOBBYAPI_COUNTRY_SLOVAKIA_, which was replaced with LOBBYAPI_COUNTRY_SLOVAKIA long time ago.
Removed LOBBYAPI_COUNTRY_ST_HELENA, which was replaced with
LOBBYAPI_COUNTRY_ST_HELENA_ASCENSION_AND_TRISTAN_DA_CUNHA long time ago.
NetGameDistServ
Removed the notion of a "started" game as it proved to be completely broken.
NetGameDistServStartGame()/NetGameDistServStopGame() were removed. When a game is started or stopped
(like during a blaze match replay), the game code running on the client is in charge of exercising the
netgamedist flow control.
Updated the stats structure to include more useful information and trimming the sizes down. There was no
need to include ping due to the fact that it can be derived from latency if needed. Added the send queue
length to allow detection when the queue is filling up at the lowest level. To allow us to get this I added
a fallthrough from NetGameDistStatus to NetGameLinkStatus. Added the packet loss and nak information as more
indicators to problems on the client->server connection.
NetGameLink
Renamed NETGAME_QOS_DURATION_MIN to NETGAMELINK_QOS_DURATION_MIN and moved it from public domain to private
domain.
Renamed NETGAME_QOS_DURATION_MAX to NETGAMELINK_QOS_DURATION_MAX and moved it from public domain to private
domain.
Renamed NETGAME_QOS_INTERVAL_MIN to NETGAMELINK_QOS_INTERVAL_MIN and moved it from public domain to private
domain.
Renamed NETGAME_QOS_PACKETSIZE_MIN to NETGAMELINK_QOS_PACKETSIZE_MIN and moved it from public domain to
private domain.
Changed the 'mwid' to a status from a control based on a v8 TODO we still had outstanding.
Voip
Removed for good 'umic' and 'uspk' control selectors that had been deprecated for a long time already.
Removed VoipDisconnect() and renamed VoipDisconnect2() to VoipDisconnect().
Removed the uAddress parameter from the VoipDisconnect() synopsis.
Removed VoipSpeaker and VoipMicrophone from the public interface. This API can be misused by customers and
given that it used to be the way to deal with muting we want to remove it to prevent incorrect use.
VoipGroup
Removed VoipGroupConnect() and renamed VoipGroupConnect2() to VoipGroupConnect().
Removed VoipGroupResume() and renamed VoipGroupResume2() to VoipGroupResume().
DirtySDK (XboxOne)
NetConnXboxOne
Removed support for -nologin parameter with NetConnStartup() and NetConnConnect(). -nologin used to be
exercised by FIFA tools. Instead of using -nologin, tools can just call NetConnStartup() and not
call NetConnConnect(). Implicitly that means tools do not need to wait for netconn to reach +onl state
before doing generic networking activity.
Changes/fixes in this release:
DirtySDK (All)
Build
Changed the documentation generation to use the headerfiles fileset which is updated to include the correct
files across platform. This allows us to reduce the complexity of our doxygen configuration generation as
it now works similarly to the sourcefiles fileset.
Fixed hack that gets a property that just equates to ${config-system} with just ${config-system}.
Changed the build scripts to explicitly build against the newest C standard (c11). We currently are not
supporting the older standards and don't want to assume a default. This fixes some issues with how some
1st Party APIs are defined.
Common
Removed the platform specific zlib functionality, instead we call into DirtySDK which implements it already
for all platforms.
ConnApi
Removed parameter validation from ConnApiControl('sqos') and ConnApiControl('lqos') to eliminate
code duplication with equivalent validation made in NetGameLinkControl('sqos') and
NetGameLinkControl('lqos').
Removed the ProtoUpnp code from ConnApi, which is already handled in NetConn. The ConnApi module would be
doing the UPnP operations too late for it to be of value as we want this to be available early so it can be
updated in the user's information.
Refactored the virtualisation of the VoIP ports to the module that owns the VoIP connection. In a dedicated
server scenario, ConnApi does not establish any VoIP connection as this is handled by the VoipTunnel owned
by the ConnApiVoipManager.
Refactored ConnApiRemoveClient to validate the index passed in to ensure that it is the valid range.
Removing code relating to increasing our connection timeout required to create a secure association used for
legacy failover mode (which was removed).
CommUdp
Enhanced internal implementation with major cosmetic fixes to re-align with coding standard. No functional
impact.
Removed code duplication between commudp and voipservercomm by moving shared code to a new file called
CommUDPUtil.
CryptBn
Changed the right shift operation to clear the memory when shrinking the width to match what we do in other
places.
CryptEcc
Changed the output of the functions CryptEccPublic, CryptEccSecret and CryptEccSign to be optional.
CryptRSA
Changed the internal exponentiation function so it can take in different data for different needs.
Refactored the RSA exponentiation code to use a sliding window algorithm as an optimization.
DirtyAddr
Changed DIRTYADDR_MACHINEADDR_MAXLEN from 127 to 372 for xboxone specifically to fix a rare issue demonstrated
in production where the SecureDeviceAddr blob would be clamped when stored in a DirtyAddrT because too large.
After discussing with MS, 372 was identified as the right size to avoid this kind of issue.
(See comment in the code for more details)
DirtyCert
Changed the 'prld' to use the correct variable when changing a value based on a control. It was using iControl
which tells us which control we are working on instead of iValue.
DirtyJpg
Fixed an unusual case where the huffman decoder was reading past the end of the input file.
DirtyLib
Removed some erroneous extra argument provided to NetPrintf.
Changed the array printing code to add the opening brace on its own log line. This allows the array to be
copied more easily from the log files.
Changed NetPrintfVerboseCode to only call ds_vsnprintf when the verbosity is over the check level.
Removed unused defines from the Gen3 era.
Refactored the NetCrit system to be driven by EAThread instead of being implemented in place.
DirtyNames
Removed unneeded extern for function declarations.
DirtyNet
Changed to refactor address conversion to text and address printing, moving some code from plat-str to
dirtynet, and consolidated and rearranged. Also updated for coding standards, and reordered address
functions to make more sense and align with header.
Cleaned up the ambiguity about what an INVALID_SOCKET descriptor means. Protect operations that
require a valid socket descriptor or that valid only when the socket has not been added to the kill
list. When shutting down a socket we want to make sure that we protect the socket for the short time
before it is actually released.
Changed the map translate print to level 3 verbosity based on how often we print this.
Fixed the code so we have the tick when we finish the receive into allocated packet queue entries. When
looking at the time between adding an entry to the packet queue and removing we were noticing that packets
off the physical socket were reporting misleading times.
MurmurHash3
Changed the code to use the EABase little endian define. The current code was not correctly applying the
little endian logic for all the support systems.
NetConnCommon
Moved implementation of netconn external cleanup mechanism to netconncommon to eliminate code duplication
in netconnxboxone and netconnps4.
_NetConnAddToExternalCleanupList() becomes NetConnCommonAddToExternalCleanupList().
_NetConnProcessExternalCleanupList() becomes NetConnCommonProcessExternalCleanupList().
Moved iRefCount from platform specific implementations to NetConnCommonStartup. Moved the associated printf
on PC and Unix for consistency in the logging.
Fixed an issue with NetConnStartup, NetConnShutdown and DirtyCert from the recent merging on NetConnCommon
into all platforms.
NetGameDist
Enhanced internal implementation with major cosmetic fixes to re-align with coding standard. No functional
impact.
Changed implementation of NetGameDistInputLocalMulti() to improve readability without impacting
functionality: rewrote a very complex if statement in a more explicit manner.
Removed the unused variable iStrmMaxPktSize, leftover from when dist owned the streams.
Moved the status selectors to the NetGameDistStatus function from NetGameDistControl to align with the rest
of DirtySDK
NetGameDistServ
Fixed flow control handling when Join-in-Progress is exercised.
Fixed usage of _NetGameDistServSanityCheckIn(). It is meant to be used after a call to
NetGameDistInputPeek(), but it was not used like that before this fix.
Removed unused NetGameDistServT::aInKeepAlive and NetGameDistServT::aOutKeepAlive.
Adjusted the send and peek timing logging to be a multiple of the configured fixed rate to prevent spamming
the logs when on higher fixed rate configurations.
NetGameLink
Enhanced internal implementation with major cosmetic fixes to re-align with coding standard. No functional
impact.
Renamed KEEP_ALIVE_TIME to NETGAMELINK_KEEPALIVE_TIME.
Enhanced the send packet code to prevent sync packets from appending to unreliable packets. The sync
packets are used to drive the stats we provide at the NetGameLink level, dropping one of these packets would
skew this information.
Changed NetGameLink to adjust the stream max packet size based on the CommUDP max width.
Plat-str
Added ds_fmtoctstring(), which formats hexadecimal text from an input binary blob of data.
ProtoHttp
Fixed a bug where the base url was not correctly processed when using a proxy server.
Changed ProtoHttpStatus() function to pass down unhandled selectors to ProtoSSLStat(), rather than directly
returning a -1 unhandled result.
Fixed crash in the instance we call ProtoHttpRecvAll with a NULL buffer but the response has no body.
Normally when a response has a body the use of a NULL buffer and size of zero will prompt ProtoHttp to tell
us that we need to allocate more space to be able to receive. If there is no body and we get a success right
away if will try to null-terminate that buffer which would lead to a crash.
ProtoHttp2
Changed ProtoHttp2Status() function to pass down unhandled selectors to ProtoSSLStat(), rather than
directly returning a -1 unhandled result.
Fixed a missing NetPrintf argument for [%p] print (pState).
Enhanced the logging for when we get an invalid stream id in a frame that requires one.
Changed the trigger for incrementing the flow control window to when it will be under the size of the window
to prevent pausing the download.
Fixed out of bound access when trying to print invalid frame types.
ProtoHttpManager
Changed the code to prevent a dereference of NULL when logging an error as the pHttpCmd variable might be
NULL.
ProtoHttpServ
Fixed crash in protohttpserv when a http2 client is used.
Increased the size of the URL data in the request structure to 128 bytes.
Fixed a bug with not setting the correct maximum buffer size for the write callback. The maximum needed to
account for the amount of data that was already written.
ProtoMangle
Removed unnecessary platform-specific code used while generating random port. From now on, a port range of
6000 is used on all platforms.
ProtoSSL
Changed TLS_ECDHE_RSA_WITH_AES_(128|256)_CBC_SHA to be TLS1.2+ only after testing revealed issues with
TLS1.1 and prior.
Fixed issue where _ProtoSSLRecvHandshakeFinish() was processing multiple handshake packets at once, which
could cause the handshake hash to be computed for more handshake packets than was correct. This did not
cause an issue prior to TLS1.3, but resulted in bad handshake hash calculations in the CertificateVerify
and Finished messages received from mozilla servers (which send the Certificate and CertificateVerify in
one SSL frame) when using TLS1.3.
Fixed _ProtoSSLRecvServerKeyExchange() to validate the RSA-PKCS1.5 signature padding (in addition to adding
RSASSA-PSS validation for TLS1.3).
Changed signature validation to use generated object comparison rather than parsing the included object.
This is generally understood to be better practice than ASN.1 parsing, which is error-prone.
Changed to consolidate some other code (debug printing of premaster and master secrets, clearing premaster
secret from memory) in _ProtoSSLBuildKey().
Fixed a possible issue in _ProtoSSLHandshakeHashGet() where an unknown hash result from CryptHashGetSize()
could fall through without error. Changed handling of a hash too large for the provided buffer by
truncating the size and continuing rather than returning an error.
Fixed an issue where a certificate date validation failure would not fail the connection IFF the signing
certificate was not available locally but was successfully installed on-demand by DirtyCert.
Changed to refactored secure data receive flow, and increased internal receive buffer. This allows
handshake messages that are larger than a single SSL record to be received successfully, as well as in
general simplifying and cleaning up the receive code. While fragmented SSL handshake messages are very
rare they can happen when a very large Certificate is sent by the server, for example.
Fixed _ProtoSSLUpdateRecvCertificate() to validate outer certificate envelope size.
Fixed to add validation of ChangeCipherSpec message size and content.
Changed the signature verification to heap allocate the CryptRSA state. The size of the CryptRSA state can
be rather large due to the number of CryptBnT structures that we use in certain conditions. This is the
only instance of us using a stack allocated CryptRSA state and we rather prevent stack overflow issues.
Fixed a crash by ensuring we successfully get the Hash ASN object before trying to generate a hash.
Changed the certification validity expiration prints to only be done when DEBUG_VAL_CERT is enabled.
Changed ProtoSSLShutdown to clear the stored CAs.
ProtoTunnel
Changed the send callback to early out when sending on the server socket used for xbox one. This socket
should be treated the same as the normal prototunnel socket, we will not try to match a tunnel.
Refactored the tunnel flush timeouts to check the last send time on individual tunnels instead of mass
flushing all tunnels regularly regardless of when the last send occurred. This should help improve packet
bundling behavior.
ProtoWebSocket
Fixed an issue where receiving an empty control frame (e.g. a ping) would cause the receiving to get stuck.
Added logging when we enforce the minimum keep-alive internal of 30s to let users know what is happening.
QosApi
Removed an unused function prototype.
Tools
Removed the mapparse and mpsummary tools as they are no longer used. The source code for these can be found
at //gos/tools/dirtyutils.
UserListApi
Added a comment to specify that a certain structure is only valid within the UserListApiCallbackT.
Voip
Changed VoipSetEventCallback() to now enter the ThreadCrit before proceeding. This is to avoid any
potential theoretical race condition where the voipthread would kick in and use the callback while the
main thread is in the middle of altering it.
VoipAux
Updated the build script's include to make sure that it adds the package.dir to the fromfile attribute.
The basedir only applies to the files in source.txt and not the fromfile call itself.
VoipCommon
Changed VoipCommonStartup() to now take a new input parameter called pTextDataCb() invoked internally
when the system notifies readiness of newly locally generated transcribed text (ready for transmission
over the network).
Fixed potential buffer overrun caused by trying to set channel settings on the shared audio input device
on a platform that doesn't support it.
Changed the logic to make sure that we have a valid index into LocalUsers/RemoteUsers for the 'luid'/'ruid'
status selectors.
Changed the check for support of the shared user index, checking negative does not work against 0xff when
checking against an int32_t type. Instead of checking for negative we want to check that the shared user
index is not set to the invalid value. When selecting the channel it did not seem as if the original check
was doing what was desired.
Changed the shared user index checks to compile time instead of runtime to prevent certain compilers
generating unreachable code warnings.
VoipConnection
Changed implementation to properly initialize the per-connection voice send timers used for sending at
a fixed 10hz rate. Prior to this change, there was a possibility for the first voip MIC packet being sent
to contain more than 100 ms of voice (i.e. the packet would keep filling up to the max sub-packet limit).
Fixed setting/testing of the VOIP_PACKET_STATUS_FLAG_STT flag.
Enhanced logics protecting against reliable data packing overflow.
Changed implementation to now pack and unpack target client id with reliable data. Allows for ignoring
inbound reliable data for which we are not the target when receiving voip MIC packet from the voipserver.
Fixed the name of the _VoipEncodeFlags and _VoipDecodeFlags function to _VoipEncodeLocalHeadsetStatus and
_VoipDecodeRemoteHeadsetStatus respectively to better reflect their purpose.
Changed how much channel configuration data we send in the ping packets. Added a channel user indices bitset
to flag which indices the channel configuration corresponds to. This allows us to send less channel
configuration data in the ping packets.
Removed the fixed channel configuration from the ping packet and use the variable data where the reliable
data used to live to write the needed channel configuration. This bumps the VoIP packet version to 'h'.
VoipGroup
Fixed a cleanup ordering issue in _VoipGroupManagerShutdown() that could result in a crash when
_VoipGroupManagerEVentCallback() is invoked from the voip thread.
Added support for VOIP_CONNID_ALL in the VoipGroupMuteByXXX methods to affects all users in the VoipGroup
at once.
Refactored the module ref logging to use %p instead of 0x%08x.
Added VoipGroupMuteByClientId3.
Added VoipGroupMuteAll, which stacks with the other VoipGroupMuteByXXX methods.
VoipHeadset
Changed VoipHeadsetCreate() to now take a new input parameter called pTextDataCb() invoked internally
when the system notifies readiness of newly generated transcribed text.
VoipMixer
Removed unused parameter iMixBufferUnused from VoipMixerAccumulate() synopsis.
VoipPacket
Removed VOIP_MAXSUBPKTS_PER_PKT. Had not been needed since _VoipConnectionIsSendPktReady() had
been added.
Removed the VOIP_PACKET_RELIABLE_FLAG_FIRST flag, no longer needed.
Changed the value of VOIP_PACKET_RELIABLE_FLAG_ACK_ACKCNF and VOIP_PACKET_RELIABLE_FLAG_DATA.
VoipTunnel
Fixed the client flags to properly reset the VOIPTUNNEL_CLIENTFLAG_RECVVOICE when a user leaves the game.
Enhanced the send logic to no longer call the user callback when send fails. We want to correctly represent
how much data we are sending, this could potentially misrepresent our metrics. This aligns with what we do
for game traffic.
Fixed missing NetPrintf argument.
XmlParse
Removed assignment of a variable that gets reassigned on the next line.
DirtySDK (PC)
CommUdp
Fixed an incorrect sizeof() in PC-specific portion of _CommUDPListen0().
DirtyNetWin
Fixed incorrect debug printfs for the 'keep' selector.
Switched to using a uintptr_t variable to store the temp handle when creating our threads so we don't need
to have a 32-bit / 64-bit check.
VoipPc
Changed implementation to align with new synopsis of VoipCommonStartup().
Fixed the duplicate check by checking the right most condition to use the correct define.
DirtySDK (PS4)
CryptRand
Refactored the PS4 implementation to use the random library provided by the SDK. Due to only being able to
generate 64 bytes at a time, we use it to seed our random. With this change you are now required to load the
Random module.
DirtyLibPS4
Refactored _NetTickCount to use sceKernelGetProcessTimeCounter function which stops while the system is
suspended.
DirtySessionManagerPs4
Refactored the control code to align more closely with other DirtySDK modules. We want to get rid of the
large switch statement in the beginning of the function as it is hard to maintain. Instead we will return an
error when we reach the end of the invitation controls if we are doing the sessions via the server.
NetConnPS4
Refactored internal implementation. Changed NetConnUserT to be a collection of fields belonging to a single
user instead of a collection of arrays indexed with the user index.
NetConnUserT::aNpid[] renamed to NetConnUserT::NpId.
NetConnUserT::aNpState[] renamed to NetConnUserT::NpState .
NetConnUserT::aUserServiceUserId[] renamed to NetConnUserT::UserServiceUserId.
NetConnUserT::aAuthCode[] renamed to NetConnUserT::AuthCode.
NetConnUserT::aParentalCtrls[] renamed to NetConnUserT::ParentalCtrls.
NetConnUserT::aPsPluss[] renamed to NetConnUserT::PsPlus.
NetConnUserT::aNpAvailability[] renamed to NetConnUserT::NpAvailability.
NetConnRefT::NpUsers renamed to NetConnRefT::aUsers[].
Created NetConnNpRequestTypeE. Needed for new synopsis of _NetConnUpdateNpRequests().
Enhanced internal implementation.
* For consistency with how things are done in other DirtySDK files, local variables declaration made in for
loops were moved to the beginning of the function.
* Renamed some local variables with more explicit names.
* Made debug logging more consistent across the files.
* Uniformized usage of i, iIndex, iUserIndex and iLocalUserIndex --> it is now iLocalUserIndex everywhere.
Refactored internal implementation: moved implementation of netconn external cleanup mechanism to
netconncommon to eliminate code duplication, and also slightly modified implementation details
such that the new common api is used in a more uniformed manner.
Changed from using IEAUser to KettleUser to align with the code used in netconnxboxone.
ProtoHttpPS4
Fixed a potential crash when running out of system resources.
Fixed the handling of an error when rate limiting reduced the number of bytes to send to 0.
Fixed an issue with rate throttling that prevented request with no payload from completing.
Refactored the timeout behavior to use the our own timeouts rather than the native PS4 timeout system to
better match what we do on other consoles.
Fixed the return value of the 'data' status selector to return the size of the header plus the currently
received size of the Http body.
VoipHeadsetPS4
Modified implementation to now unconditionally apply most restrictive voip settings to comply with Sony TRC
R4061 when there are multiple local users interacting with a game (note: that's different from EA MLU which
implies multiple users authenticated with Blaze). Under such conditions, we used to apply most restrictive
voip settings only if users were sharing output audio via TV and input audio via PS4 cam mic. If both
users were identified to be using dedicated headsets, we used to apply respective privileges on a
per-headset basis. Sony confirmed this being an incorrect strategy
(https://ps4.scedev.net/support/issue/131717/_Need_help_with_interpretation_of_TR_4061) as there is no way
to make sure that the restricted user is not hearing the voice even if headsets are detected because what
is detected as a headset connected to a controller can rather be a speaker.
VoipPS4
Changed implementation to align with new synopsis of VoipCommonStartup().
DirtySDK (Unix)
DirtyLibUnix
Removed the NetTickSet function which was previously used to workaround an issue with an older version of
the linux kernel.
Removed the _NetLib_bCritEnabled variable which has been replaced with a NetConn startup parameter.
DirtyNetUnix (All)
Moved global socket control 'spam' to _SocketControlGlobal while leaving per socket 'spam' control in
SocketControl(). This does not change any behavior but aligns the grouping of global controls and socket
specific controls.
Aligned with dirtynetwin regarding the logging in SocketConnect, we should be logging the remote address
after translation.
Changed SocketDestroy to wait for any current socket lookups to finish processing. If there is a current
socket lookup processing and we destroy the hostname cache, after the processing is finish it will segfault.
DirtyNetUnix (iOS/OSX)
Fixed a bug that broke iOS IPv6 compatibility, introduced in the 15.1.3.0.0 SDK release.
DirtySDK (XBoxOne)
NetConnXboxOne
Refactored internal implementation: moved implementation of netconn external cleanup mechanism to
netconncommon to eliminate code duplication, and also slightly modified implementation details
such that the new common api is used in a more uniformed manner.
Fixed an incorrect debug trace in _NetworkStatusThread().
Refactored to cache the value of NetConnStatus('tria') so avoid the performance hit from accessing the
1st party object.
ProtoHttpXboxOne
Refactored calls to 1st party API which take a long time to resolve so that they are run in a seperate
thread.
Refactored to move the Open() and initialization of the IXMLHttpRequest2 object into a task to prevent its
long execution time from causing visual glitches when an HTTP request is performed.
Refactored so that the request header callback would fire on the same thread as the http requestor thread.
This is a requirement for WebKit.
Fixed a potential crash when cleaning up the XMLHTTP object.
Fixed an issue for request requiring DirtyCert, the DirtyCert request was not complete at the time we were
trying to query the token which caused these operations to fail.
Refactored threads so that the custom header callback is triggered on the same thread as the caller of
ProtoHttpUpdate().
Refactored the process kill list to accomodate part of the clean up process occuring in a new thread.
Fixed an error that set the XmlHttp object to NULL incorrectly.
Fixed a race condition by forcing all XmlHttp objects to be destroyed via the kill list.
Moved a call to _ProtoHttpRequest on a thread inside the critical section.
Fixed an occasional Nucleus login issue by working around an error the MS api returns after reaching the
maximum number of redirections.
Fixed an issue where the protohttp reference can be destroyed while an asynchronous task is in progress.
Fixed an issue where a critical section was not left before an early return.
ProtoMangleXboxOne
Removed usage of the PROTOMANGLE_STATE_UNLOCK state for security associations. This state was an
unnecessary state because the "unlocking" step has never really been enforced by Microsoft.
It was a pre-gen4 launch concept that did not become real at gen4 launch.
ProtoTunnel
Fixed to track up to sixteen different remote server ports for the server socket.
Changes to status/control selectors:
-changed 'bnds' control selector to not recreate the server socket if it already exists.
-changed 'bnds' status selector to return if the specified port is in the list of server ports.
-changed 'bnds' status and control selectors to use iValue instead of iValue2 for the server port.
-added 'bndr' control selector to remove a mapped server port.
VoipHeadsetXboxOne
Removed while loop in _VoipHeadsetPollForVoiceData() because there is no good reason to read more
that one sample bundle per voip thread iteration. Moreover, the while loop proved to be problematic
with TTS specifically because the capture source suddenly has a lot of samples ready (... much more
that what typically is delivered in a 20 ms sampling window) and that resulted in the originator
filling up the inbound receive queues of consumers.
Changed implementation to use NetTickUsec() instead of NetTick() to get usec precision when logging
voice submission activity.
Fixed a vector by changing it to an immutable vector to prevent a possible crash.
VoipXboxOne
Changed implementation to align with new synopsis of VoipCommonStartup().
Changed implementation to properly support new Text-to-speech (TTS) and Speech-to-text (STT) features
in XboxOne. These changes became unavoidable with STT/TTS because without them it was nearly impossible
to play back successfully a very long input text. The inbound queue on the consumer side would just
continuously overflow.
* Changed VOIP_THREAD_SLEEP_DURATION from 18 ms to 20 ms. It used to be 18 ms because we had
problems pumping the voip thread at a sharp 20 ms rate. This problem was resolved by replacing
calls to NetTick() with calls to NetTickUsec() in _VoipThread(). NetTick() does use the high
res timer internally but it rounds up the result when it returns a ms value. The previous
implementation ended up not being able to create a sharp 20 ms pump rate because it was
subtracting two rounded up value. The new implementation is performing a single usec to
msec conversion at the last minute when it is about to call NetConnSleep().
* Also, the priority of the _VoipThread() was changed from THREAD_PRIORITY_HIGHEST to
THREAD_PRIORITY_TIME_CRITICAL. The new implementation is much closer to what MS does in the
GameChat DLL.
EADP Game Services DirtySDK 15.1.3.0.5 - October 10, 2017
This SDK release was built using the following compiler packages:
EA Config 5.01.00
Framework 7.01.00
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 170302-proxy
capilano_config 1.05.07
Kettle kettlesdk 4.508.111-proxy
kettle_config 2.01.00
iPhone ios_config 1.07.00
iphonesdk 8.0-proxy-3
OSX UnixGCC 0.10.00
osx_config 1.11.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
ProtoWebSocket
Added APIs to allow sending of text data to the server. Our other APIs only allowed sending binary data
but the protocol also supports text, for more information see: https://tools.ietf.org/html/rfc6455#section-5.6
Changes/fixes in this release:
DirtySDK (All)
ConnApi
Fixed negative indexing when updating connection timers for the DirtyCast client.
MurmurHash3
Changed the function name of the internal implementation of rotl64 to prevent colliding on other systems
that might provide it.
ProtoHttp
Fixed a write callback bug when all data is available immediately, in which case the write callback was
completing the transaction before the data could be read.
ProtoTunnel
Fixed an Xbox One specific issue when a player is in multiple meshes with more than one server, e.g. in a
situation where a user is in a CC-assisted game group while being in a dedicated server game. In such an
instance, the packets for the first server connected to would cease to flow when the second server
connection was established.
DirtySDK (PS4)
ProtoHttpPS4
Refactored the timeout behaviour to use our own timeouts rather than the native PS4 timeout system to better
match what we do on other systems.
DirtySDK (XboxOne)
ConnApi
Changed the size of a local variable used to store a SecureDeviceAddress as it could potentially be not
large enough for some theoretical networking conditions.
DirtyAddr
Changed DIRTYADDR_MACHINEADDR_MAXLEN from 127 to 372 for xboxone specifically to fix a rare issue
demonstrated in production where the SecureDeviceAddr blob would be clamped when stored in a DirtyAddrT
because too large. After discussing with MS, 372 was identified as the right size to avoid this kind
of issue. (See comment in the code for more details)
NetConnXboxOne
Fixed an issue with resume where if we didn't set the the status thread connectivity level to none will
cause netconn to skip the xbl_wait state causing connection failures
ProtoHttpXboxOne
Fixed an issue where a redirect request would never be killed when redirection is disabled due to it never
going into the completed state.
VoipHeadsetXboxOne
Fixed a potential crash in a race condition to create a chat participant for a bystander.
EADP Game Services DirtySDK 15.1.3.0.4 - August 30, 2017
This SDK release was built using the following compiler packages:
EA Config 5.01.00
Framework 7.01.00
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 10.0.14393.2156-proxy
capilano_config 1.05.07
Kettle kettlesdk 4.508.031-proxy
kettle_config 2.01.00
iPhone ios_config 1.07.00
iphonesdk 8.0-proxy-3
OSX UnixGCC 0.10.00
osx_config 1.11.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
New in this release:
DirtySDK (All)
ProtoHttp/ProtoHttp2
Added a timeout error (-7) when our module level timeout hits to allow the caller to differentiate between
errors at the lower protocols currently driven by HRESULT.
ProtoHttp2
Added support for HTTP/2 frame padding, see: https://tools.ietf.org/html/rfc7540#section-10.7
VoipTunnel
Added VoipTunnelStatus('talk') which returns the current count of "talking" clients, which is a client for
which the VoipTunnel detects inbound voip traffic.
Changes/fixes in this release:
DirtySDK (All)
Build
Changed the optimized buildtype to correctly derive from what buildtype we are current building (static /
dynamic) using ${dirtysdk-buildtype}.
CommUDP
Fixed an issue in CommUDPSend() where a full reliable buffer would prevent unreliable packets from being
sent.
Hpack
Fixed the string decode function to initialize the output to NULL to prevent from freeing stack memory
when there is temporary data still being pointed to from previous functions.
ProtoWebSocket
Updated the initial handshake receive to be copied into a temporary buffer and changed how it detects we
have the complete handshake header. Previously, if we get the HTTP/1.1 header data and some of the websocket
data combined in a single receive call, we have trouble getting into the open state as expected.
DirtySDK (XboxOne)
ProtoHttpXboxOne
Fixed the header parsing to replace the final \r\n with NULL characters to align with our other protohttp
implementations. This is required for the headers to be compatible with the ProtoHttpUtil header parsing
functions.
Removed the memmove in recv that was causing performance issues. On Xbxone the memmove is not really necessary
since we always allocate a buffer big enough for the full response.
UserListApiXboxOne
Fixed a crash that happens when reading the XboxUserProfile results by adding null checks and exception handling.
EADP Game Services DirtySDK 15.1.3.0.3 - July 12, 2017
This SDK release was built using the following compiler packages:
EA Config 5.01.00
Framework 7.01.00
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 10.0.14393.2156-proxy
capilano_config 1.05.07
Kettle kettlesdk 4.508.001-pr-proxy
kettle_config 2.01.00
iPhone ios_config 1.07.00
iphonesdk 8.0-proxy-3
OSX UnixGCC 0.10.00
osx_config 1.11.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
Changes/fixes in this release:
DirtySDK (All)
Build
Updated the voipaux sourcefiles includes to make that it adds the package.dir to the fromfile attribute.
The basedir only applies to the files in source.txt and not the fromfile call itself.
ConnApi
Updated ConnApiRemoveClient to validate the passed in index to ensure it is in the valid range we
support.
Removed the virtualization of the voip port when voip is disabled.
This allows for virtualization to only be done by modules that own the voip connection.
DirtyNet
Updated the async receive code to cleanup the packet queue entry when receiving data into it results
in an error, allowing it to be used again.
NetGameDistServ
Removed the notion of a "started" game as it proved to be completely broken.
When a game is started or stopped, the game code running on the client is in charge of exercising the
netgamedist flow control.
ProtoHttp2
Updated the processing of the url when using a proxy server, we needed to update the url after doing our
parsing.
ProtoHttpServ
Updated the URL length in the request data to 128 bytes.
DirtySDK (Unix)
DirtyNet
Updated SocketConnect logging to align with dirtynetwin which logs the remote address after translation.
EADP Game Services DirtySDK 15.1.3.0.2 - June 1, 2017
This SDK release was built using the following compiler packages:
EA Config 5.01.00
Framework 7.01.00
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 10.0.14393.2156-proxy
capilano_config 1.05.07
Kettle kettlesdk 4.508.001-pr-proxy
kettle_config 2.01.00
iPhone ios_config 1.07.00
iphonesdk 8.0-proxy-3
OSX UnixGCC 0.10.00
osx_config 1.11.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
Changes/fixes in this release:
DirtySDK (All)
CommUDP
Added a reliable resend timer separate from our normal send timer to control when we resend reliable
packets. When customers mix reliable and unreliable packets, it didn't play well with the timer that
we had setup within commudp.
CryptBn
Updated the calculation of the big number bit length to use the correct builtin based on the
representation of uint64_t on our platform. On 32-bit platforms we were trying to calculate using
the unsigned long version when uint64_t is a unsigned long long on that platform.
CryptEcc
Updated the double and add operations for elliptic curve key generation to use a sliding window.
This algorithm is adapted from the one used for RSA Exponentiation which is discussed in the Handbook of
Applied Cryptography Chapter 14.6.
ProtoSSL
Updated the server handshake to make sure that we send the server key exchange for ECDHE ciphers
when client certs are enabled.
Fixed to add PKCS#1 1.5 padding validation to signature verification, added OBJ_sha384 and OBJ_sha512 to
ASN.1 parser table, now required for proper PKCS#1 signature validation.
Fixed to add overflow checking on ASN.1 length parsing.
Removed obsolete and unsafe OTG3 and GOS2011 CAs from trusted store.
DirtySDK (PS4)
ProtoHttpPS4
Fixed an issue when a POST must be changed to a GET.
Refactored the creation and destruction of 1st party http contexts objects so that they only exist during requests.
Refactored the maximum number of times the net context could be shared from a hardcoded constant to a variable
that can be set through ProtoHttpControl('mncs') or DirtyContextManagerControl('mncs').
Fixed an issue where a socket is potential left open after a sceEpoll is destroyed without being unset.
DirtySDK (XboxOne)
NetConnXboxOne
Removed the use of the cached User^ and instead rely upon EAUser to provide the information we
previously relied upon the cached ref for.
EADP Game Services DirtySDK 15.1.3.0.1 - April 11, 2017
This SDK release was built using the following compiler packages:
EA Config 5.01.00
Framework 7.01.00
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 10.0.14393.2156-proxy
capilano_config 1.05.07
Kettle kettlesdk 4.508.001-pr-proxy
kettle_config 2.01.00
iPhone ios_config 1.07.00
iphonesdk 8.0-proxy-3
OSX UnixGCC 0.10.00
osx_config 1.11.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
Changes/fixes in this release:
DirtySDK (All)
CommUDP
Changed the #define for ESC_CAUSE_LOSS to not use the define statement as part of the PS4 4.5 SDK changes.
DirtySDK (PS4)
DirtySessionManagerPS4
Changed the constant SCE_NP_PLAY_TOGETHER_MAX_ONLINE_ID_LIST_NUM to SCE_NP_PLAY_TOGETHER_MAX_INVITEE_LIST_NUM as part of the PS4 4.5 SDK changes.
EADP Game Services DirtySDK 15.1.3.0.0 - March 31, 2017
This SDK release was built using the following compiler packages:
EA Config 5.01.00
Framework 7.01.00
Android androidsdk 24.4.1-1-2
androidndk r13b
android_config 4.00.00
Capilano CapilanoSDK 10.0.14393.2156-proxy
capilano_config 1.05.07
Kettle kettlesdk 4.008.131-proxy
kettle_config 1.14.00
iPhone ios_config 1.07.00
iphonesdk 8.0-proxy-3
OSX UnixGCC 0.10.00
osx_config 1.11.00
Linux/Unix UnixClang 0.12.02-proxy
Win32 DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 14.0.23107-1-proxy
WindowsSDK 10.0.10586-proxy
*** Important - DirtyCast Failover Mode has been removed ***
Support of DirtyCast Failover mode has been removed in this release.
This feature has now been replaced by Connection Concierge.
*** Important - Public API changes UserListApi PS4 ***
The profile mask is now not supported when querying for the block list.
Please specify a type mask of 0 instead.
*** Important - Public API changes for ConnApi ***
Removed ConnApiStart().
Removed ConnApiStop().
Removed ConnApiRematch().
Removed ConnApiSetPresence().
*** Important - PS4 User Identifier Changed ***
As part of Sony's SDK/API 4.0 Sony has deprecated APIs that use OnlineIds, in
favor of replacement versions using the PS4 account ids. All DirtySDK calls to
PSN have been switched to use PS4 account ids instead of OnlineIds.
*** Important - Public API changes for DirtyNet ***
Renamed SocketInfo('size') to SocketInfo('psiz')
Renamed SocketPacketQueueStatus('size') to SocketPacketQueueStatus('psiz')
Renamed SocketPacketQueueStatus('full') to SocketPacketQueueStatus('pful')
*** Important - WinRT/WinPRT ***
Removed WinRT and WinPRT support completely.
*** Important - Modules removed from DirtySDK ***
The following modules have been migrated to the new LegacyDirtySDK package
LobbyLan
Sort
Tagfield
NetResource
WebOffer
New in this release:
DirtySDK (ALL)
Build
Added exporting of the buildtype in our module's publicdata, which allowed dependent packages to easily find
our exported libs/dlls.
Enhanced build scripts to define headerfiles so the headers show correctly in Visual Studio.
CryptBn
Added a dedicated big number module based on the CryptRSA's implementation, this is used a basis for all
the crypto based math for RSA/ECC operations.
CryptEcc
Added this module to implement math for short Weierstrass curves using CryptBn. This is the basis for the
support of the P-256/P-384 curves we use within ProtoSSL.
ConnApi
Added more detail connection metrics which could be retrieved in the ConnApiInfoT struct as a ConnApiConnTimer with the following fields:
* uCreateSATime - time it takes to resolve secure association (xbox one)
* uConnectTime - time it takes for intial connection attempt
* uDemangleTime - time it takes to attempt demangling on the connection
* uDemangleConnectTime - time it takes to attempt a connection after demangling
Hpack
Added a module to implement HTTP/2 Header compression support based on
https://tools.ietf.org/html/rfc7541. This module is used primarily by the new ProtoHttp2 module.
JsonParse
Added new JsonParse2() API, which handles allocation of required memory internally.
Added new getters supporting an error flag (JsonGetString2, JsonGetInteger2, JsonGetDat2, JsonGetBoolean2,
JsonGetEnum2), which can be leveraged to simplify parsing code that wants to validate whether fields were
present or not. JsonGetInteger2 also supports min/max valudation.
Plat-str
Added new ds_memclr API that encapsulates memsetting memory to zero. In an attempt to prevent incorrect
uses of memsetting, we have introduced an API that encapsulates the more common case for memset. For cases
where memset to zero is not desired a ds_memset function was created so we can easily track conforming code.
ProtoHttp
Added support for http PATCH requests.
ProtoHttp2
Added a module to implement HTTP/2 based on https://tools.ietf.org/html/rfc7540.
ProtoHttpUtil
Added support for parsing the HTTP/2 style header which name begin with a leading ':' character.
ProtoSSL
Added support for setting TCP_NODELAY socket option on the ProtoSSL socket.
Added support for the elliptic curve client hello extension. This extension allows us to negotiate which
elliptic curves we support.
Added support for ECDHE Key Exchange and the following cipher suites:
PROTOSSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256
PROTOSSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA256
PROTOSSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256
PROTOSSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384
PROTOSSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA
PROTOSSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA
Due to the performance of our configured elliptic curves, these cipher suites are currently disabled by
default.
ProtoTunnel
Added new status selector 'vers' that can be used to query the prototunnel version negotiated on a specific
tunnel.
VoipCommon
Enhanced debug logging for voip muting using 'umic' and 'uspk' control selectors. And fixed incorrect
prefix in some other already existing debug traces.
VoipGroup
Enhanced logging for the low level connectivity id when resuming a connection.
DirtySDK (iOS)
Build
Added an objective-c fileset / source text for adding multiple files to build as objective-c filetype.
Added the -Wno-deprecated-declarations flag to disable warnings cause by CHttp functions used in dirtynet.
DirtySDK (PS4)
DirtyContextManagerPS4
Added a system to share sceNetPools to make it possible to create more concurrent ProtoHttpRefTs.
DirtyErrPS4
Added errors from the Sony SSL/HTTP libraries.
Added missing errors from the Sony WebApi library.
DirtyWebApiPS4
Added server error message reporting when dealing with errors. We previously only reported the SDK side
errors but not the errors reported by the server. The server errors are not defined in a manner that we
can get the data from DirtyErr so we need to rely upon the data returned by the response information
struct.
NetConnPS4
Enhanced NetConnShutdown() with implicit IEAUser entries cleanup in case the game team is not calling
NetConnRemoveLocalUser() before calling NetConnShutdown(), or in case recent remove requests are still
pending in the internal request list when calling NetConnShutdown().
ProtoHttpPS4
Added support for http POSTs with no payload.
Added additional printf messages for debugging http headers.
Added error logging so we know what the exact Sony errors were when any error occurs.
VoipPS4
Added VoipControl('+pri') to be used to by game code to signal that the specified local user shall be
included when internally calculating most restrictive voip privileges
Added VoipControl('-pri') to be used to by game code to signal that the specified local user shall not be
included when internally calculating most restrictive voip privileges.
DirtySDK (XboxOne)
NetConnXboxOne
Enhanced NetConnShutdown() with implicit IEAUser entries cleanup in case the game team is not calling
NetConnRemoveLocalUser() before calling NetConnShutdown(), or in case recent remove requests are still
pending in the internal request list when calling NetConnShutdown().
Changes/fixes in this release:
DirtySDK (ALL)
Build
Switched over to using Visual Studio 2015 by default.
Refactored contribs to unflatten the include structure. To prevent collisions with other libraries we
are adding extra directories to our include structure.
common/include -> common/include/libsample
voipaux/include -> voipaux/include/voipaux
General
Refactored locations that use memcpy/memcpy_s to use ds_memcpy/ds_memcpy_s.
ConnApi
Removed ConnApiStart(), ConnApiStop(), ConnApiRematch(), ConnApiSetPresence(). Those functions are
leftovers from the xbox360 times... they have been no-op for a long period. They no longer need to exist.
Fixed the setting of the GameServer's VoIP connection id by setting to VOIP_CONNID_NONE to prevent
incorrect teardowns of any active VoIP Connections. When in a Game Group and a DirtyCast hosted game,
if we leave the game the VoIP connection would have been incorrectly torn down. This causes our VoIP port
to be devirtualized, which caused our subsequent VoIP connections a higher chance of getting into a bad
state. So instead we needed to indicate that the DirtyCast GameServer does not own any VoIP connections and
that we will only devirtualize the VoIP port when tearing down the connection.
Changed the virtualization of ports to be at the ConnApi level instead of the connection level. When doing
virtualization of ports at a connection level we can quickly run out of available ports. Since we know that
the virtualized ports do not change we can easily move this. With this change I updated our documentation
of how the client level ports are assigned to be more clear of what is happening.
Removed gameserver mode concept used for fallback. Fallback mode has been replaced with connection concierge.
DirtyLib
Changed to move platform-specific time code from plat-time to dirtylib.
Changed NetPrintfCode() to initilize string buffer separately from instantiation. This is an optimization
to prevent the entire array from having to be memset at instantiation on every invocation.
DirtyMem
Removed these two external MEMIDs: PLAYERSYNCSERVICE_MEMID ('plss') & TELEMETRYAPI_MEMID ('telm')
Any external module using the dirtymem api is now assumed to be internally defining its own mem id.
Removed unused internal MEMIDS: PROTONAME_MEMID ('pnam') & PROTOARIES_MEMID ('pari') &
FRIENDAPI_MEMID ('frnd') & DIRTYLSP_MEMID ('dlsp') &
COMMSER_MEMID ('cser')
DirtyNet
Fixed error conversion logic in SockRecvfrom(). Socket type (stream vs dgram vs raw) is now taken
into account to determine what conversion to use. The incorrrect logic proved to be problematic with
TCP sockets using async recv thread and being explicitly polled for recv by the client code instead
of just relying on recv callback invocation by the DS layer.
Changed (renamed) SocketInfo('size') to SocketInfo('psiz')
Changed (renamed) SocketPacketQueueStatus('size') to SocketPacketQueueStatus('psiz')
Changed (renamed) SocketPacketQueueStatus('full') to SocketPacketQueueStatus('pful')
Fixed SocketPacketQueueStatus 'pdrp' and pmax' when using the SocketPacketQueueAlloc code path.
Changed SocketAddrMapTranslate to accept addresses of the same type without reporting an error.
DirtySock
Removed the LobbyLan, Sort, Tagfield, NetResource and WebOffer modules.
These can now be found in the LegacyDirtySDK package.
Fixed potential threading issues with modules with updates calling through NetConnIdle.
JsonParse
Fixed JsonFind() to prevent reading outside the parse buffer.
Fixed JsonParse() to return zero if the parse buffer is too small.
NetConn
Changed NetConn to track NetConnStartups and Shutdowns with a reference count. Copied the handling on some
NetConnStartup params over to NetConnConnect options.
NetGameUtil
Fixed NetGameUtilConnect() and NetGameUtilAdvert() to correctly handle failing calls to
_NetGameUtilAdvtConstruct().
Fixed local error codes possibly conflictig with COMM_* error codes in NetGameUtilConnect().
Changed implementation to eliminate code duplication: advt ref validation code
is now centralized in _NetGameUtilAdvtConstruct().
Plat-str
Changed to replace use of strncpy() with inline implementation in ds_strnzcpy(), for improved performance
when copying a string into a large buffer. The standard version will fill any unwritten parts of the
destination buffer with zeros.
ProtoHttpServ
Changed strLocation (redirection location) to ProtoHttpServeResponseT.
ProtoMangle
Updated logging to know what ports are bound and what currently module ref that logs belong to
QosApi
Removed unused tagfield include.
Changed the default packet queue length to 12 (up from 10), in testing this covers the most extreme case
of _QosApiRecvCB NetCritTry never succeeding.
Added logging describing packet queue health, a warning will be printed if the queue is close to being
full.
Fixed a print which indicated both FW probes were sent to the same address, when they in fact have not.
VoipCommon
Fixed a potential race condition between the main thread and the voip thread when altering the voip channel
config. The bApplyChannelConfig variable was being set to TRUE before propagating the change down to the
voip layer with VoipControl('chan'). Under some timing conditions, that could result in the voip thread
applying the voip channel config with the old values instead of the new values because the data structures
involved were not yet updated.
VoipGroup
Fixed some coding standard violations, arrays are required to be prefixed with "a"
VoipTunnel
Changed to using qsort for sorting our internal lookup table.
Changed suspended data not found logging to be at a higher verbosity as we assume this something that doesn't happen often and can be quite spammy
DirtySDK (PS4)
DirtyContextManagerPS4
Fixed a bug which prevented the manager from properly cleaning itself up on shutdown.
Changed to Sony API using PSN account ids.
DirtyLibPS4
Changed mutex creation to attempt to fallback to an unnamed mutex when create returns
SCE_KERNEL_ERROR_EAGAIN.
DirtyUserPS4
Removed unused tagfield include.
Changed to Sony API using PSN account ids.
DirtyWebApiPS4
Fixed DIRTYSESSMGR_MEMID being incorrectly used instead of DIRTYWEBAPI_MEMID.
Changed mutex creation to attempt to fallback to an unnamed mutex when create returns
SCE_KERNEL_ERROR_EAGAIN.
Removed the SDK 2.5 checks as we are long past the days of titles allowed to ship on those old SDKs.
Removed deferred delete list.
Changed to Sony API using PSN account ids.
NetConnPS4
Fixed multiple cosmetic issues to improve code readability and alignment with coding convention.
Fixed an inconsistent error code in NetConnShutdown.
Changed to Sony API using PSN account ids.
PrivilegeApiPS4
Changed to Sony API using PSN account ids.
ProtoHttpPS4
Fixed the dumping of the POST data payload, we needed to use the size instead of the result of send.
Changed the HTTP connection template creation to disable gzip decompression. ProtoHttp does not offer this
type of functionality which causes some isues when trying to read gzipped compressed bodies from the
server.
Fixed an issue where large headers were not processed properly.
Fixed a possible truncation of a url when formatting a request.
Fixed an issue with long urls getting truncated.
Refactored to deactivate the Sony library's automated handling of redirections and cookies in order to
provide the exact same behavior as other platforms.
Fixed the handling of binary certs.
Fixed the http headers to be associated with the sceRequest rather than the sceTemplate to make sure the
headers are cleared at the appropriate times. This prevents the http library from running out of memory
after a few uses of a protohttp reference.
UserApiPS4
Changed to Sony API using PSN account ids.
UserListApiPS4
Changed to Sony API using PSN account ids.
VoipPS4
Changed to Sony API using PSN account ids.
VoipHeadsetPS4
Fixed dirtysdk incorrectly requiring a voip user to be a member of a blaze mesh for his privacy settings
to contribute to the calculation of the most restrictive voip setting on the console in scenarios where
multiple users are locally signed-in. DirtySDK now only requires the user to be authenticated with blaz
for his privacy settings to contribute to the calculation of the most restrictive voip setting. The
rational being that a blaze authenticated user is implicitly a user interacting with the game UI and
therefore a "particiapting user" as defined by Sony.
Changed initialization of Sony voice lib to leverage the new sceVoiceSetThreadsParams() api
(introduced is SDK 3.50) to specify the priority and the affinity of the internal voice and audio port
threads. This replaces the usage of ephemeral high-priority threads for calling sceVoiceStart() and
sceVoiceCreatePort() such that internal threads inherit of the right attributes.
Changed _VoipHeadsetUpdateChatPrivileges() to now take the new +pri / -pri config into account when
calculating pHeadset->bSharedPrivilege.
DirtySDK (Unix)
DirtyNetUnix
Fixed to revert address selection to prefer IPv4 addresses on non-Apple platforms. Apple platforms
continue to prefer IPv6 addresses, a fix that was required for iOS10 compatibility.
NetConnUnix
Fixed an inconsistent error code in NetConnShutdown.
DirtySDK (XboxOne)
DirtyAddrXboxOne
Removed TagField usage as TagField will be moving to the LegacyDirtySDK.
Fixed an off-by-1 error for decoding binary7 Xbox One addresses.
DirtyUserXboxOne
Removed TagField usage as TagField will be moving to the LegacyDirtySDK.
ProtoHttpXboxone
Refactored implementation to use a request killlist where terminated requests are queued until they
complete for good. That is replacing the former explicit abort operations.
Changed the implementation with the introduction of a state machine to track asynchronous evolution
of a specific xmlhttp object.
EADP Game Services DirtySDK 2015 Winter 2.3.0 - October 19, 2016
This SDK release was built using the following compiler packages:
EA Config 4.03.01
Framework 6.04.01
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 10.0.14393.1058-proxy
capilano_config 1.05.03
Kettle kettlesdk 3.508.041-proxy
kettle_config 1.06.00
iPhone ios_config 1.03.00
iphonesdk 8.0-proxy-2
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.02-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-4-proxy
WindowsPhoneSDK 8.0.9900-proxy
*** Important: The CommTAPI and CommSer modules have been removed ***
*** Important: The CryptSSC2 module has been removed, for string encrypt/decrypt please use CryptArc4 ***
*** Important: The SOCKET_ASYNCRECVTHREAD = 0 support has been removed ***
New in this release:
DirtySDK (All)
ConnApi
Added a new control selector 'dtif' that can be used to override the default timeout value for XB1
security association creation or the demangling timeout on other platforms (in a cc-assisted or failover
context).
DirtyNet
Added support for TCP keep-alive settings using the 'keep' control. In some environments we need to be able
to tweak the keep-alive settings to ensure that firewalls and other external parties do not close our
connections without notifying us.
Added SocketHostnameCacheDel, which deletes an entry from the hostname cache (internal use only).
Added debug print when a lookup is refcounted.
NetConn
Added ability to allow users to override the cpu affinity of our internal threads with a netconn startup
param "-affinity".
Platform
Added ds_strtoull function to convert strings to uint64_t.
Added support for using EABase to drive the platform.h defines.
ProtoSSL
Added support for the ALPN extension (Application Level Protocol Negotiation) on both the client & server
side. This extension helps negotiate a protocol between the client & server; see the spec at
https://tools.ietf.org/html/rfc7301.
Added ProtoSSLControl() 'resu' selector, to enable/disable SSL session resume (enabled by default,
preserving previous behavior).
Added support for setting the keep alive settings for the TCP socket. To support this I've added
an 'skep' option and followed the same pattern as the other socket options that we set for this module.
QosApi
Added ability to configure much of qosapi with QosApiControl, via the BlazeSDK util component this provides
us with many options to tweak QOS behaviors post ship. New selectors are:
'bpco' - if used overrides config from server, this will be the number of bandwidth probes used for tests
'bpso' - if used overrides config from server, this will be the size of bandwidth probes used for tests
'isyt' - sets the maximum number of ms to wait to initially synchronize all latency requests
'lpco' - if used overrides config from server, this will be the number of latency probes used for tests
'pque' - passed to SocketControl 'pque' if not 0, otherwise the numpackets will be passed to SocketControl
'pque'
'rbuf' - passed to SocketControl 'rbuf'
'repc' - sets the number of extra probes sent (in addition to those which received no response) on a re-issue
'sado' - set the override address to send the http requests to when issuing a service request, overrides
parameter passed to QosApiServiceRequest
'salp' - if TRUE use old logic of sending all latency probes at once (default FALSE)
'sbuf' - passed to SocketControl 'sbuf'
'sprt' - set the override port to send the http requests to when issuing a service request, overrides
parameter passed to QosApiServiceRequest
'tgbp' - sets the minimum number of ms between sending latency probes to the same site.
'ussl' - if TRUE use https else http for setup communication (defaults TRUE)
DirtySDK (PS4)
DirtySessionManagerPS4
Added new status selectors for PlayTogther support. New selectors are:
'pthe' - poll this selector to check if the client has received the PlayTogether event
'ptil' - if a PlayTogether event has been received use this selector to retrieve the invite list
NetConnPS4
Added a new startup parameter "-checktick" on PS4 to control how we initialize DirtyEventManager. The new
startup parameter will control if we fail our initialization of DirtyEventManager in the case that we have
potentially missed events because the EASystemEventMessageDispatcher has been ticked. By default we will
not check if the dispatcher has been ticked so teams don't need to worry about aligning the startup of the
two systems.
ProtoHttpPS4
Added protohttpps4 for native support of HTTP and SSL.
DirtySDK (XboxOne)
NetConnXboxOne
Added extra mapping from sandbox to environment to prevent having the title download storage figure out the
environment:
* EARW.3 -> CERT
* XDP1.0 -> PROD (EA Access Testing)
Changes/fixes in this release:
DirtySDK (ALL)
Build
Changed to set the optionset to the C++ build type when building those types of files. With newer packages
we see that our C++ files were trying to be built as C and causing us to generate some compiler errors due
to that.
ConnApi
Changed to move the virtualization of ports to be handled at the connapi layer instead of having the
network adapter deal with it.
DirtyCert
Changed to move DirtyCert updating to the internal NetLib idle thread. To make integration easier for our
customers, this makes it possible to use ProtoHttp without the need to poll NetConnIdle. The major
requirement that ProtoHttp depended on was DirtyCert, which needs to be updated in case we needed to pull
down any CA certs.
DirtyNet
Fixed to no longer refcount HostentT refs that are in the list but are in a done state.
JsonParse
Fixed crash issue parsing json with leading whitespace.
ProtoHttp
Fixed a bug in both ProtoHttpGetNextHeader() and ProtoHttpFindHeaderValue(), when dealing with an empty
header.
ProtoHttpServ
Fixed an issue which could lead an http client to hang indefinately or until timeout when the client
requested a keep-alive.
Fixed a cert cache issue where it was possible to reconnect to a server with a cached cert using IP address
instead of name.
ProtoTunnel
Fixed to initialize the sockaddr used in _ProtoTunnelRecvCallback to prevent address translation spam.
QosApi
Changed to improve latency tests accuracy in poor network conditions; latency is now done in parallel
across all ping sites, preventing random lag spikes from effecting one result.
Changed to improve logging by making it more configurable with QosApiControl('spam') - set the verbosity of
the module, default 1 (0 errors, 1 debug info, 2 extended debug info, 3 per probe info).
Changed public APIs QosApiCreate and QosApiServiceRequest to simplify API and better reflect data types
being passed.
Removed unused defines QOSAPI_STATUS_XB_*, QOSAPI_LISTENFL_*, and QOSAPI_RESPONSE_MAXSIZE.
Removed and replaced QOSAPI_REQUESTFL_* with QosApiRequestTypeE.
VoipConnection
Fixed coverity warning about potential out of bound access of pConnection->VoipMicrPacket[] array when
user index is VOIP_SHARED_USER_INDEX (0xFF on PC).
Fixed a bug in use of memset, which resulted in target buffer not being cleared.
VoipTunnel
Removed deprecated flags and fields that were set for deprecation since v9
* VOIPTUNNEL_CLIENTFLAG_BROADCASTING_VOICE
* VOIPTUNNEL_GAMEFLAG_MAX_VOICES_REACHED
* VoipTunnelGameT.iNumClientsBroadcasting
XmlFormat
Fixed access to unitialized variable coverity warning.
DirtySDK (PS4)
DirtySessionManagerPS4
Fixed to try to catch configuration errors with dirtysessionmanager as we want to send failures back to
bring it to the attention of integrators.
Fixed an issue where the return value was not properly being set because of a bad enclosure of assignment.
DirtySDK (Unix)
Build
Removed voiptunnel.c from unix specific sources as this is already part of main source list.
DirtyNetUnix
Fixed _SocketLookupThread to prefer IPv6 addresses, when available. This fixes compatibility with iOS10.
Fixed SocketConnect to scrub a hostname cache entry when connect() returns an EHOSTUNREACH error. This
type of error happens when switching from an IPv4 to an IPv6 connection or vice versa.
DirtySDK (XboxOne)
Build
Changed to use sdkreferences task when depending on any of the extension assemblies on XboxOne.
ProtoMangleXboxOne
Fixed a potential issue where an IPv6 user mapping might get updated instead of added.
NetConnXboxOne
Fixed to handle the AsyncStatus::Started case when calling DownloadBlobAsync. FIFA was seeing instances
where we would crash when getting a AsyncStatus::Started due to the fact that we don't handle and just kill
the async operation. After discussing this with Microsoft their suggestion was just to ignore this status
as you should expect to get another callback when the operation actually finishes.
Fixed an issue were a failed environment check would not properly trigger a retry, leaving netconn stuck in
~env state indefinitely.
EADP Game Services DirtySDK 2015 Winter 2.2.3 - September 19, 2016
This SDK release was built using the following compiler packages:
EA Config 3.04.00
Framework 5.05.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 10.0.10586.1203-proxy
capilano_config 1.03.03
Kettle kettlesdk 3.508.041-proxy
kettle_config 1.06.00
iPhone ios_config 1.03.00
iphonesdk 8.0-proxy-2
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.01-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-1-proxy
WindowsPhoneSDK 8.0.9900-proxy
New in this release
DirtySDK (All)
DirtyNet
Added support for TCP keep-alive settings using the 'keep' control
EADP Game Services DirtySDK 2015 Winter 2.2.2 - September 06, 2016
This SDK release was built using the following compiler packages:
EA Config 3.04.00
Framework 5.05.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 10.0.10586.1203-proxy
capilano_config 1.03.03
Kettle kettlesdk 3.508.041-proxy
kettle_config 1.06.00
iPhone ios_config 1.03.00
iphonesdk 8.0-proxy-2
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.01-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-1-proxy
WindowsPhoneSDK 8.0.9900-proxy
New in this release:
DirtySDK (All)
ProtoSSL
Added ProtoSSLStat() 'rsao' selector to signal that there is currently an RSA operation ongoing.
Changes/fixes in this release:
DirtySDK (All)
ProtoTunnel
Fixed a knock-on in cl 1174902 when faced with discarding an out-of-order packet that could not be
recovered. This would cause a stream reset that broke the connection. This fix reverts part of that
change to make the out-of-order packet discard safe and not break the connection. In doing so it undoes
the original fix, meaning some other resolution for that issue will be required moving forward.
DirtySDK (PC)
VoipPC
Fixed intermittently broken voip on PC caused by bad initialization of the VoIP user identifier.
DirtySDK (Unix)
NetConnUnix
Fixed to check for NULL terminator when parsing /proc/cpuinfo in the case we have a truncated string
(does not include \n). This caused issues on newer hardware where the flags field grew larger than 512,
which caused a crash from the loop never exiting.
EADP Game Services DirtySDK 2015 Winter 2.2.1 - July 13, 2016
This SDK release was built using the following compiler packages:
EA Config 3.04.00
Framework 5.05.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 10.0.10586.1203-proxy
capilano_config 1.03.03
Kettle kettlesdk 3.508.041-proxy
kettle_config 1.06.00
iPhone ios_config 1.03.00
iphonesdk 8.0-proxy-2
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.01-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-1-proxy
WindowsPhoneSDK 8.0.9900-proxy
Changes/fixes in this release:
DirtySDK (PS4)
DirtySessionManagerPS4
Changed DirtySessionManager to better catch configuration errors and service it back to integrators.
VoipHeadsetPS4
Fixed _VoipHeadsetUpdateChatPrivileges() to ignore non-participating user. This fix is necessary to comply
with TRC R4061G in PS4-TestCase_for_TRC1.5_e stating: A non-voip-restricted user in a game should not see
his voip blocked because of a voip-restricted user signed-in on the console but not participating in the
game.
DirtySDK (XboxOne)
NetConnXboxOne
Fixed potential crash in the lambda expression performed when the DownloadBlobAsync() operation completes
with completion status AsyncStatus::Canceled. The code incorrectly uses a reference that was invalidated
when the operation cancellation was initiated.
ProtoHttpXboxOne
Fixed a potential external cleanup issue by adding a timeout to stop waiting for the E_ABORT that might
never come. Instead after 5 second time we will fake the E_ABORT Event ourselves.
DirtySDK (Unix)
DirtyNetUnix
Removed the use of AI_V4MAPPED flag when ai_family is AF_UNSPEC.
EADP Game Services DirtySDK 2015 Winter 2.2.0 - June 09, 2016
This SDK release was built using the following compiler packages:
EA Config 3.04.00
Framework 5.05.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 10.0.10586.1203-proxy
capilano_config 1.03.03
Kettle kettlesdk 3.508.041-proxy
kettle_config 1.06.00
iPhone ios_config 1.03.00
iphonesdk 8.0-proxy-2
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.01-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-1-proxy
WindowsPhoneSDK 8.0.9900-proxy
New in this release:
DirtySDK (All)
Build
Enabled shadow variable warnings on targets that doesn't set this by default.
DirtyLib
Added NetPrintRateLimit, implementing automated rate limiting of redundant lines of NetPrintf output.
Identical sequences of lines are suppressed for up to 100ms, or when a new line of text is printed.
The number of suppressions is appended to the line of text. Lines of text over 256 characters are
not rate-limited.
DirtyNet
Added SocketPacketQueueStatus('full') to query if socket inbound packet queue is full or not.
Added SocketPacketQueueStatus('size') to query current size (in packets) of socket inbound packet queue.
Added IPv6 support definitions and includes.
Added SocketAddressMap functionality, moved here from dirtynetxboxone, for general IPv6 support. IPv6
addresses are mapped to pseudo-IPv4 addresses for public consumption.
NetConn
Added standard error code for NetConnStartup.
ProtoHttpServ
Added function to log via the logging callback at varying verbosity levels.
ProtoSSL
Added debug output of certificate signature type when validating a certificate.
QosApi
Added code to leverage the new support for SocketControl('pque') on physical sockets (non-virtual). QosApi
is now using a socket with a 10-deep recv paquet queue to eliminate the possibility of inducing artificial
latency resulting from inbound latency probes remaining in the system socket receive buffer because the
1-deep queue was full. (Happens when the critical section cannot be entered in the recv callback registered
by qosapi - _QosApiRecvCB())
DirtySDK (Android/iOS/PC/Unix/XboxOne)
DirtyNetWin
Added IPv6 support, switched to using IPv6 sockets internally, leveraging dual-protocol stack functionality
to continue to support IPv4. Added IPv6 name resolution support to SocketLookup(). IPv4 names continue
to be preferred when available.
DirtySDK(WinRT)
DirtyNet
Added new define INADDR_LOOPBACK for WinRT configurations
DirtySDK(XboxOne)
NetConnXboxOne
Added a new XBLWait state so make sure we wait for the connectivity level to become xbox live.
Changes/fixes in this release:
DirtySDK (All)
Build
Moved the contents of dirtysock-initialize.xml to Initialize.xml file and tell the package to
initializeself. This makes it so the package will include Initialize.xml automatically without us needing
to do it explicitly.
Changed implementation to now export the DIRTYCODE_LOGGING defines based on the
dirtysdk_debug_enable / dirtysdk_debug_disable build properties.
Removed hhc.exe from the SDK and depend on the userdoc package to provide this when building documentation.
Removed unused macro / defines
Removed unused release build scripts
ConnApi
Fixed the GameServer's bAllocated flag to be correctly set TRUE during client initialization.
CryptGCM
Fixed crash in _CryptGcmDecrypt() when passed a negative length. This condition is rare and has been seen
when an SSL server incorrectly sends an unencrypted alert message when aborting a connection.
DirtyLib
Changed to move/consolidate NetPrintfCode and NetPrintfHook to dirtylib from platform-specific files.
Moved DIRTY_TOKEN_PASTE and DIRTY_CONCATENATE_HELPER here from dirtynet.h as a better fit.
DirtyNet
Fixed implementation to skip empty hostname cache entries before checking for expiration, to eliminate
confusing debug output.
Refactored recv path for physical sockets (non-virtual):
* Replaced hard-coded 1-deep queue with configurable n-deep queue.
* Performed appropriate changes for all flavors (win, x1, ps4, unix) to be as close as possible
(eliminated unjustified platform specificities)
* Simplified recv path logic in terms of what is done in the context of SocketrecvFrom() vs in the
context of socketrecvthread
Standardized verbosity tracking and usage (spam levels).
JsonParse
Added handling for JSON strings inside of JsonSeekObjectEnd.
Plat-str
Cleanup and better support of IPv6 address printing.
ProtoAdvt
Fixed a couple of places that didn't initialize a sockaddr struct before use.
ProtoHttpServ
Changed all the logging to use the logging callback so we get in the applications that run this module.
ProtoSSL
Fixed a bug when requesting an SSLv3 connection where the requested cipher list would be empty, causing
the connection to fail. This is only relevant to test setups as DirtySDK clients do not request SSLv3
by default.
ProtoTunnel
Removed tunnel mode concept from prototunnel.
DirtySDK (PC)
DirtyNetWin
Removed DirtyNetXboxOne. Consolidated win and xboxone implementations in a single file called DirtyNetWin
to achieve reduction of code duplication.
VoipConnection
Fixed the voip data to not be processed if there is no listening device attached to prevent TTY spam on PC.
DirtySDK (PS4)
Build
Removed unsupported defines as part of the PS4 3.500 SDK upgrade. The ORBIS_SDK_VERSION was replaced by
SCE_ORBIS_SDK_VERSION.
Removed very old version checks that are no longer needed.
Removed the privilege checks for asynchronous multiplayer as this is not supported on the newer SDK.
Changed implementation to now set the config-vs-version on PS4 to support the use case of Frostbite titles.
Make sure to only set the VS2015 compiler flags for vc compilers.
Fixed PS4 compiler warnings introduced in the PS4 3.500 upgrade, reported by a customer (Unreachable code
and checking NULL on arrays).
DirtyNetPS4
Added handling of sceNpWebApiDeleteRequest failures.
DirtySessionManagerPS4
Fixed potential mem leaks caused by the changeable data never being released when it exists.
Fixed implementation of DirtySessionManagerControl('gchg') to invoke
_DirtySessionManagerSetChangeableSessionData() instead of _DirtySessionManagerSetSessionData().
DirtyWebApiPS4
Changed where iThreadLife is set to DirtyWebApiCreate (main thread).
NetConn
Fixed implementation to check the result code of sceAppContentAppParamGetInt() when querying for trial
status.
UserApiPS4
Fixed a double counting problem when a first party query fails.
DirtySDK (XboxOne)
Build
Fixed compiler warnings introduced by upgrading to the March XDK.
* Fixed shadow variable usage in 'poll' selector (dirtynetxboxone)
* Fixed an incorrect implementation of SocketRecvfrom the pBuf parameter is non-const (dirtynetxboxone)
* Remove unused variables on platforms they are not used on (connapi, user, privilege)
* Use a conditional instead of assigning an integer to a boolean in C++ (voipxboxone)
* Remove printing of serialization size as that was the only use of the variable and not very helpful to
logging.
* Suppress warning in T2Host relating to changing of sizes between compilers and alignment attributes
* Assign the enumeration to the correct value instead of treating it as an integer (privilege)
* Switch from while(1) to for (;;) to prevent a constant expression warning (SampleCore)
* Remove unused variable (connapi, SampleCore)
DirtyLibWin
Changed to statically initialize nettick frequency to a safe value, so any calls to NetTick() on Xbox One
before NetConnStartup() will not crash.
DirtyNetXboxOne
Switched to using DirtyNet functions for Address Map functionality that were previously internal.
Removed DirtyNetXboxOne. Consolidated win and xboxone implementations in a single file called DirtyNetWin
to achieve reduction of code duplication.
VoipHeadsetXboxOne
Refactored bad rep check query to use normal lambda expressions.
EADP Game Services DirtySDK 2015 Winter 2.1.0 - March 31, 2016
This SDK release was built using the following compiler packages:
EA Config 3.04.00
Framework 5.05.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 10.0.10586.1100.0-proxy
capilano_config 1.03.03
Kettle kettlesdk 3.008.211-proxy
kettle_config 1.05.00
iPhone ios_config 1.03.00
iphonesdk 8.0-proxy-2
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.01-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-1-proxy
WindowsPhoneSDK 8.0.9900-proxy
*** Important - Xbox One XSAPI 2.0 Support ***
This version of DirtySDK supports XSAPI 2.0 which is not backwards compatible with XSAPI 1.0.
Integrators will need to build against XSAPI 2.0.
*** Important - ConnApi client uId of 0 is now considered invalid ***
ConnApi client with a uId of 0 will now be consider invalid and will be ignore by ConnApi.
*** Important - First DirtySDK version compatible with the Connection Concierge feature ***
This version of DirtySDK includes a large amount of changes that were introduced specifically for interoperability
with the Connection Concierge tech (https://docs.developer.ea.com/display/TEAMS/Connection+Concierge+Project).
Regardless of your game leveraging Connection Concierge or not, those changes should be transparent to you.
New in this release:
DirtySDK (All)
CommUdp
Added backwards-compatible update to protocol to allow versioning, defined previous version as 1.0 and new
version as 1.1.
Added larger subpacket support (increased from a maximum of 250 bytes to 1530 bytes) for connections
negotiated to commudp protocol version 1.1 or higher. Subpackets requiring 250 bytes or fewer continue to
use one byte of encoding, while larger subpackets require two bytes. This allows packet redundancy, when
combined with raising the default redundancy limit, for larger packets.
ConnApi
Added the ability to specify a user index when activating the P2P connection forced failure debug
option ('!res'). Setting the index to -1 will affect all users like the old behavior.
Added support for hosted connections (obtained from Connection Concierge). New code paths were added
to use connection IDs received from Connection Concierge when setting up game connections, voip
connections and tunnels. Related public api changes:
* Added multiple new fields to ConnApiClientInfoT.
* Added CONNAPI_CCMODE_* defines.
* Added a new 'ccmd' control selector to specify the Connection Concierge mode associated with
the connapi instance.
DirtyNet
Added prints to track virtual port addition and deletion.
Added packet drop and packet high water to packet queue.
Added SocketInfo() 'pdrp' and 'pmax' selectors.
JsonParse
Added support for JSON payloads greater than 64k.
Added support for JsonParse taking a length of -1, in which case strlen is used to calculate the size of
the input JSON buffer.
Added support for JsonParse to take a null parse buffer, in which case the size in bytes required for the
parse buffer are calculated and returned.
ProtoHttpServ
Added support for a 'spam' control to control the amount of logging with do within the module.
Added a request timeout to cover situations where the remote side stops sending or receiving, defaulting
to 30 seconds.
Added a ProtoHttpServControl('idle') selector to set the idle/keep-alive timeout.
Added PROTOHTTPSERV_FLAG_LOOPBACK.
Added ProtoHttpServCreate2() which has an additional uFlags parameter.
ProtoTunnel
Added a new 'actv' status selector to get the number of active tunnels on based on a specific prototunnel
version.
Added a new 'vset' status selector to get a comma delimited list of versions we support to report to the
CCS.
Added PROTOTUNNEL_VERSION, PROTOTUNNEL_VERSION_MIN, PROTOTUNNEL_VERSION_MAX to the public header file.
Voip
Added support for one way muting.
VoipCommon
Added a new 'vcid' control selector to assign a local 32-bit identifier to a specific voip connection.
VoipConnection
Added support for hosted connections (obtained from Connection Concierge). New code paths were added
to use connection IDs received from Connection Concierge when setting up voip connections.
Related public api changes:
* New uRemoteClientId field added to VoipConnectionT.
* Renamed uClientId field to uLocalClientId in VoipConnectionT.
VoipGroup
Added support for hosted connections (obtained from Connection Concierge). New code paths were added
to use connection IDs received from Connection Concierge when setting up voip connections.
Related public api changes:
* Added VOIPGROUP_CCMODE_* defines.
* Added a new 'ccmd' control selector to specify the Connection Concierge mode associated with
the voipgroup.
* Added VoipGroupConnect2() which takes an additional bIsConnectivityHosted input parameter and an
additional uLowLevelConnectivityId input parameter.
* Added VoipGroupResume2() which takes an additional uLowLevelConnectivityId input parameter. For
Connection Conncierge support specifically.
VoipTunnel
Added support for allowing voiptunnel clients to exist in multiple games. This functionality to used to
mimic how Blaze handles clients in Games and Game Groups. Related public api changes:
* Added VOIPTUNNEL_MAXSUSPENDED.
* Added VoipTunnelSuspendInfoT.
* Added iNumSuspended field to VoipTunnelClientT.
Added support for a unique game identifier that can be specified when creating the game in the
voiptunnel. New API functions were added to allow users to work with this identifier. Related public
api changes:
* Added VoipTunnelGameListAdd2().
* Added iGameIdx input param to VoipTunnelClientListDel().
* Added VoipTunnelGameListMatchIndex().
* Added VoipTunnelGameListMatchId().
DirtySDK (PS4)
DirtyNet
Added missing definition for INADDR_LOOPBACK for PS4, needed in protohttpserv.
VoipHeadsetPS4
Added the ability to configure voice lib thread attributes. You can override the settings with your
Blazeserver util.cfg.
DirtySDK (PS4/XboxOne)
NetConn
Added a new 'eusr' selector that returns the IEAUser object at a given index.
DirtySDK (XboxOne)
DirtyNetXboxOne
Added functionality to remap IPv6 addresses to existing IPv4 virtual addresses. It was demonstrated that
this update is possible in a cable pull scenario.
ProtoMangleXboxOne
Added processing for updates of secure associations which the are already in a completed state to update
the IPv6 address mappings.
Voip
Added bad reputation auto muting support in order to better satisfy XR-086. This feature will be on by default.
Changes/fixes in this release:
DirtySDK (All)
Build
Fixed doc build errors.
Fixed warnings generated by VS2015 Update 1
Changed the build scripts to use the config-vs-version property to better handle changing between versions
of Visual Studio.
ConnApi
Fixed how we increment the client count.
Fixed the 'cadr' selector to return the prototunnel address used.
Removed CONNAPI_STATUS_CLSE as it is no longer used.
Fixed an issue that caused the previous mute settings not to be properly retained when resuming a voip
connection.
Fixed an issue where a game group would use the wrong voip port when joining a game session, then a
game group, then leaving the game session.
Fixed ConnApiControl 'adve' selector, when disabling advertising, to also destroy the NetGameUtil ref
if it has already been created.
DirtyCert
Fixed to not issue a redundant preload request if a preload request is already in the queue.
Fixed a bug where a successful preload triggered by a validation failure would result in a failed
transaction, because the subsequent on-demand request would be considered to fail due to adding a
redundant CA.
DirtyNet
Fixed to include missing return in 'pque' selector that caused misleading debug warning.
Changed packet queue max size from 127 to 1024.
JsonFormat
Fixed _JsonUpdateHeader() to prevent buffer offset from exceeding the buffer size during an overflow
condition. This fixes a possible memory stomp on a subsequent call to a JsonFormat method.
JsonParse
Fixed a bug when executing a JsonFind against an element in an unclosed array; the find would skip past the
end of the parse buffer data and access uninitialized memory.
Fixed a bug where executing a JsonFind against an unclosed element, containing a name but no value, would
result in returning a pointer to the beginning of the Json buffer.
Fixed some other cases where the parse buffer could be accessed after the terminator.
Fixed one issue each in the decode and escape lookup tables.
Fixed to ensure after calling JsonParse that the parse buffer is always zero terminated. If this is not
possible, zero is returned.
Changed name of JsonGetListItemEnd to JsonGetObjectEnd to better match JSON naming conventions. A #define
wrapper supporting the old name is included to maintain compatibility with previous code.
NetConn
Fixed documentation error in header for NetConnIdle.
Plat-time
Fixed a bug in weekday calculation in ds_secstotime.
ProtoHttpManager
Fixed to use consistent modulename as prefix to debug output.
ProtoHttpServ
Removed code in _ProtoHttpServUpdateRecvBody() that set the received body flag true when receiving a
chunked transfer without any initial data.
Changed the ProtoHttpServControl('time') selector to set the request timeout.
Fixed a typo in the default idle timeout value, which was supposed to be five minutes but was in fact much
longer.
Changed size of ProtoHttpServRequestT.strContentType[] from 32 to 64 to match what we use for
ProtoHttpServResponseT
Changed the code in the _ProtoHttpServParseHeader to skip all the URI / TYPE information that is in the header
This fixes an issue with skipping the first valid header value when parsing
ProtoTunnel
Fixed two issues when attempting to switch keys. The first issue was on the side receiving a packet
encrypted by the new key, in ProtoTunnelValidatePacket(), which was not using the new crypto state to try
decrypting the packet. The second issue was on the sending side, where a new HMAC was not being calculated
when the new key was chosen. These issues caused failures in scenarios with players in a game and a
gamegroup, when players left either the game or the gamegroup, and could not maintain their p2p
connections.
Fixed an issue where a large stream offset could cause a rematch to fail due to out-of-order discard. The
send stream offset is now reset to zero when a new key is selected, matching the behavior of the rematch
code on the receive side, which already assumes a stream offset of zero.
Fixed possible issues with crypto setup by making sure send/recv states are both initialized all of the
time when switching keys.
Fixed a bug which broke a reconnection scenario where one side of a connection was already active, while
the other was not. The bug was due to an incorrect change of hard-coded return values in
_ProtoTunnelDecryptAndValidatePacket2(), introduced along with the addition of ProtoTunnel 1.1 protocol
support.
Removed usage of hard-coded values. Replaced with explicit defines for packet decrypt flow.
Changed _ProtoTunnelDecryptAndValidatePacket() to return a VALIDATE error if an attempt to recover an out
of order packet fails.
Changed to implementation to simplify error returns from _ProtoTunnelRecvData() and error handling of
values returned by that function in _ProtoTunnelRecv().
Fixed a bug in _ProtoTunnelFindTunnel(), where a failed match of an inactive tunnel would print an error
message, but continue on with the tunnel index as if the match had succeeded. This would cause some
parameters (port, addr) to be updated incorrectly before the packet was subsequently rejected, which was
mostly harmless but could cause some confusing temporary side effects particularly in the debug printing.
Fixed various documentation and debug printing items.
ProtoWebSocket
Fixed some documentation errors regarding several TODOs in the code.
VoipCommon
Fixed a potential memory stomp when setting voip channel information for a user index which is out of range.
Fixed the channel selection functions to properly include attempts to modify the VOIP_SHARED_USER_INDEX.
VoipGroup
Fixed a bug during the transition from a gamegroup to a game so that the proper mute status from the game
group would transfer over into the game.
VoipTunnel
Remove support for the 'dcst' control which was used to set a DirtyCast hack. We now support this
functionality by default as there exists no configuration we were disable the hack.
Fixed a possible memory leak detected by Coverity, in a situation when trying to create a VoipTunnel object
and running out of memory.
DirtySDK (iOS)
Plat-time
Fixed broken NetPrintf time stamps.
DirtySDK (PC)
DirtyNetWin
Fixed the usage of the socket select() function to be compatible with Berkley sockets.
DirtySDK (XboxOne)
Build
Removed support for the XboxOne ADK
DirtyNetXboxOne
Fixed the usage of the socket select() function to be compatible with Berkley sockets.
NetConnXboxOne
Fixed an issue where token acquisition did not reset properly after a cable pull and a reconnect, leading
to a report that the token acquisition failed when it had not been attempted.
EADP Game Services DirtySDK 2015 Winter 2.0.0 - October 22, 2015
This SDK release was built using the following compiler packages:
EA Config 2.25.03
Framework 3.32.02
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 6.2.13332.0-proxy
capilano_config 1.02.00
Kettle kettlesdk 3.008.041-proxy
kettle_config 1.03.01
iPhone ios_config 1.01.05
iphonesdk 7.0-proxy-5
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.01-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-1-proxy
WindowsPhoneSDK 8.0.9900-proxy
*** Important - DIRTYSDK_IEAUSER_ENABLED compile switch no longer supported ***
Deprecated DIRTYSDK_IEAUSER_ENABLED compile switch such that IEAUser integration can no longer be turned off at
compile time when using DirtySDK NetConn for PS4 or XboxOne.
*** Important - Gen 3 platform specific code has been removed ***
Gen3 support was deprecated in 15.1.1.1.0. The remaining Gen 3 specific code have now been removed.
New in this release:
DirtySDK (All)
Build
Added support for structured xml libs-external when Framework is version 3.33.00 or higher.
Added support for Visual Studio 2015. To enable support the vsversion property needs to be
set to "2015" when building as the new warning suppressions are not backwards compatible.
Added new build property dirtysdk-contrib that allows enabling the contribs to build Without
samples. If dirtysdk-contrib does not need to be specified when dirtysdk-samples is true.
CryptSTP1
Removed CryptSTP1 support.
Displist
Removed Displist support.
Hasher
Removed Hasher support.
NetGameLink
Added verbosity setting to reduce QoS data spam in the logs unless desired.
Added the reception time in ticks of the packet to NetGamePacketHeadT metadata.
ProtoHttpServ
Added a new callback for processing the incoming header. This callback allows us to opt out of further
processing if we know that request data is malformed based on header information.
Added support for handling the 'Expect: 100-continue' header if sent by clients. ProtoHttpServ will always
just send back the 100 status code and will not reject requests based on the expect header. If a payload is
too large it can be rejected using the new header processing callback.
ProtoAries
Removed ProtoAries support.
ProtoHttpUtil
Added support for decoding url-encoded strings.
Added support for parsing query parameters similar to what we use for parsing header information.
DirtySDK (Android)
Plat-time
Added Android implementation to ds_plattimetotime().
DirtySDK (PS4)
DirtySessionManagerPS4
Added support for ps4 session changeable data.
Added new server-driven mode (all operations that are executed from a server are now disabled, i.e.
everything except what is necessary for invitation). DirtySessionManagerBinaryHeaderT and
DirtySessionManagerChangeableBinaryHeaderT are now public (PS4 only). This is to enable a compile time
check to ensure the Blaze Server's structs are equivalent to those. C++ static assert are used in the
Blaze client code (game manager) and they rely on those structures being public.
Added new status selectors:
'gcda' - to get the active session's changeable binary data size
'gpcd' - to get the pending session's changeable binary data size
'gagm' - to get the active changeable data game mode
'gpgm' - to get the pending changeable data game mode
'gagt' - to get the active binary data game type
'gpgt' - to get the pending binary data game type
'lsts' - to get the last status code returned from the calls to the Sony APIs
Added new control selectors:
'gchg' - to queue getting the changeable binary data into the pending session
'serv' - to turn on server-driven session - in that mode, this client tech no longer honors any
client request for operations that are now owned by the server
'sess' - to set session identifier (server-driven mode only)
'spgm' - to set the pending session game mode
'spgt' - to set the pending session game type
DirtySDK (PS4/XboxOne)
NetConn
Added a new status selector 'eusr' which will return the IEAUser given a dirtysock user index.
VoipHeadset
Added new status selector 'sact' to determine if the shared device is active (Kinect/PS Camera).
Changes/fixes in this release:
DirtySDK (All)
Build
Removed the AddDirtySDKLibsToModule task, external libraries are now added to the
package.DirtySDK.dirtysock.libs.external fileset instead.
Fixed 'NULL is defined to be 0' warning in platform.h by using #if defined instead of #ifdef.
Removed the DIRTYCODE_API from typedefs, definitions do not need to be exported for dynamic libraries.
Fixed an issue with how our C++ filesets are organized which caused files to be built both static and
dynamic instead of based on the build configuration.
NetGameDist
Fixed NetGameDistInputQueryMulti() and NetGameDistInputCheck() to always poll NetGameDistUpdate() for
new packet data if no remote inputs are available. Previously, NetGameDistUpdate() would not be polled
if there were no local input packets queued for sending, but this behavior had a negative impact in
multi mode, requiring the caller poll NetGameDistUpdate() themselves if they had no inputs to send. To
fix that issue and simplify the code, the (minor) optimization of not calling NetGameDistUpdate() if no
local input packets are queued, when in non-multi mode, was removed.
Fixed NetGameDistInputQueryMulti() to be safer in the event the caller calling the function following a
queue overrun. In the event of a queue overrun it is possible to lose multi inputs that have a delta
value that is not one (the default) assigned. A delta greater than one that is lost will point the
paired input queue pointer into unallocated buffer space, resulting in an invalid input with a length
of zero. This would result in a memcpy of -1 bytes which would result in a memory stomp and subsequent
crash. This scenario is now detected and handled safely; although the caller should still detect the
overflow error and shut the game down, this condition will no longer cause a crash.
Fixed NetGameDistInputCheck() to return "ready to receive" in multi mode if remote inputs are
available, regardless of whether there are local inputs queued for sending or not. This issue would
cause titles calling NetGameDistInputCheck() to incorrectly not receive data that was available if they
were not sending a steady stream of inputs themselves.
ProtoHttpServ
Changed to update the data that is based through the various callbacks for handling the request and
responses. Instead of using the same type, specific request and response types have been created.
Changed the read/write callbacks to be receive/send to be clearer for integrators.
Changed the request callback to allow to be called continuously if more processing time is needed based on
the result.
Changed the logging callback to no longer return a result.
ProtoMangle
Fixed a Valgrind warning by initializing a variable and preventing the possibility of copying garbage data
to a buffer.
ProtoTunnel
Removed 1.0 protocol support and remaining Xbox 360 code.
Removed ability to conditionally compile out HMAC.
Fixed issue with _ProtoTunnelFindTunnel() not detecting a port change during handshake.
Voip
Removed Gen3 only parameter for VoipStartup().
Changed the way we update voip channel settings. We now update it right when we get a ping and mic packet
with the new channel information instead of in voip idle. This also addresses potential multi-threading
issue with applying channel configs.
VoipCommon
Fixed shared channel configs not being recalculated after a channel reset.
Fixed a situation where channel configs are applied before we have any registered user.
VoipConnection
Fixed a wrong usage of ds_memcpy.
VoipGroup
Fixed an issue with mute flags being inconsistent or reset when player join both a game group and a game
session.
Fixed an issues with mute flag consistency across multiple voip groups when a user is a part of more than
one at the same time.
Fixed an issue where joining a second voip group or leaving an additional voip group would mute or unmute
all players respectively.
Changed 'umic' and 'uspk' control selectors to deprecated.
WebOffer
Changed the signature of WebOfferGetBusy2 to take the strDefaultMessage as a const char * instead of char *
to prevent a writable strings warning on PS4.
DirtySDK (PC)
ProtoPingPC
Fixed an issue on Windows XP where the ProtoPingIcmpResponseT structure was too small (the size required
turns out to not be documented explicitly). Adding a 32 byte buffer to the structure resolved the issue.
DirtySDK (PS4)
DirtyNetPS4
Changed implementation such that socket receive thread now runs at high priority.
DirtySessionManagerPS4
Changed the dirtysessionmanger callback not to block when we have dirtywebapi queuing enabled.
DirtyWebApiPS4
Fixed a race condition where the webapi thread sometimes would miss the signal to wake up.
NetConnPS4
Removed internal automatic detection of system users by NetConn. Usage of NetConnAddLocalUser() and
NetConnRemoveLocalUser() is now mandatory. Implicit: Also removed 'cuis' and 'csiu' status selectors
for converting system index into dirtysdk index (or opposite).
Changed the method to determine what error state NetConn enters to more accurately reflect the reason we
could not go online in a multiple user scenario.
VoipPS4
Changed implementation such that voip thread now runs at high priority.
VoipHeadsetPS4
Fixed initialization of voice lib thread priorities. sceVoiceStart() and sceVoiceCreatePort() are now
being called from dedicated ephemeral high-priority threads to force internal Sony threads to also
execute as high priority threads. This bug fix is required to eliminate crackling voice during heavy
processing scenarios (game play).
Changed voice lib initialization to comply with voice lib doc and to mimic what is done in Sony samples.
Fixed _VoipHeadsetUpdateDecoderConnections() not being called when pHeadset->bSharedPrivilege changes.
Changed implementation to flush the internal buffer of the decoder port when it is no longer connected to
any speaker port. This is required to avoid "old voice" being played back when the decoder port is being
reconnected to a speaker port.
DirtySDK (Unix)
DirtyNetUnix
Fixed to prevent the logging of ENOTCONN errors when shutting down the socket to prevent unnecessary spam.
DirtySDK (XboxOne)
NetConnXboxOne
Removed internal automatic detection of system users by NetConn. Usage of NetConnAddLocalUser() and
NetConnRemoveLocalUser() is now mandatory. Implicit: Also removed 'cuis' and 'csiu' status selectors
for converting system index into dirtysdk index (or opposite).
Refactored NetConnXboxOne to reduced complexity.
ProtoHttpXboxOne
Refactored the status function to be consistent with other platforms. Certain selectors are only handled
when the state of the module is ST_BODY or ST_DONE.
ProtoMangleXboxOne
Fixed _ProtoMangleRemoteHostAddRef() and _ProtoMangleRemoteHostDelRef() such that multi-threaded usage of
refRemoteHostRefCountMap is now guarded by the critical section.
Fixed implementation to now try-catch around usage of method used to compare two secure device addresses to
gracefully handle rare cases where a COMException is thrown.
Fixed implementation to now try-catch around SecureDeviceAddress::FromBytes().
UserApiXboxOne
Changed to using the AsyncOp refs to track the progress of requests. This prevents an issue where the
previous bitfield might get stomped on in certain conditions and makes the code clearer to understand.
VoipXboxOne
Changed to move VoIP state destruction to NetConnIdle shutdown callback. This move is because the VoIP
thread can become blocked in Microsoft Chat code for over ten seconds in certain loss-of-network scenarios.
This was causing long stalls when trying to VoipShutdown() upon loss of network. Also added guard on
VoipStartup() to ensure it is not called in a state where the module has not been shut down (VoipShutdown()
already had the corresponding guard on the module having been started).
EADP Game Services DirtySDK 2015 Winter 1.1.0 - July 09, 2015
This SDK release was built using the following compiler packages:
EA Config 2.25.01
Framework 3.32.02
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 6.2.12999.0-1-proxy
capilano_config 1.01.02
Kettle kettlesdk 2.508.081-proxy
kettle_config 1.03.00
iPhone ios_config 1.01.05
iphonesdk 7.0-proxy-5
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.12.01-proxy
Win32/WinRT/WinPRT
DotNet 4.0
DotNetSDK 2.0-4
VisualStudio 11.0.50727-1-proxy
WindowsSDK 8.0.50727-1-proxy
WindowsPhoneSDK 8.0.9900-proxy
*** Important - Gen3 platforms (PlayStation 3 and Xbox 360) no longer supported ***
The Winter 1.0.x stability branch should be used for any further development on these platforms.
New in this release:
DirtySDK (All)
Build
Removed Gen3 Support.
ConnAPI
Added support to gate the voip connection based on QoS validation. The 'estv' selector can be used to
ungate the voip connection.
ProtoHttp
Added returning of http status code as part of the 'hres' status selector.
ProtoSSL
Added signature_algorithms hello extension support, enabled by default. Some servers require this
extension to be present before accepting a connection request.
Added validation of supported signature algorithms upon receiving a CertificateRequest handshake message.
XmlParse
Added support for 64-bit integers via XmlContentGetInteger64 and XmlAttribGetInteger64.
DirtySDK (PC)
NetConnWin
Added support querying for MAC address with valid IP using the 'ethr'/'macx' when non-zero is passed into
iData.
DirtySDK (PS4)
DirtyNetPS4
Added 'spam' selector support to change debug verbosity.
NetConnPS4
Added an error message for when PRX is not loaded for the sceNpAuthCreateAsyncRequest call.
VoipHeadsetPS4
Added support for the following bitrates: 14400, 16000 and 22533. The default bitrate has been increased
from 7300 to 16000.
Changes/fixes in this release:
DirtySDK (All)
Build
Changed DirtySDK build scripts to use Framework Structured XML.
DirtyCert
Changed requesting certificates use format state field with "ST=" instead of "S=", which is the default
OpenSSL nomenclature.
NetConn
Changed NetConnDisconnect() to also abort UPnP operations.
ProtoHttp
Changed default PUT/POST behavior to not reuse a previous connection (keep-alive). When making a PUT or
POST request and utilizing a keep-alive connection, it is possible for the server to close the connection
and for that connection close to be "in flight" when issuing the request. This results in the request
being failed when the connection close is received. Because a PUT or POST request can result in modifying
server state, it may not be automatically re-issued. Not using keep-alive avoids this complication. A new
ProtoHttpControl('rput') selector has been added to disable this behavior if the caller is willing to deal
with this complication in trade for getting connection reuse on a PUT/POST.
ProtoSSL
Fixed incorrect CertificateVerify formatting when using TLS1.2. This fixes client certificate support that
was previously broken when connecting to a server supporting TLS1.2.
Fixed an error with 'hres' selector not returning the right hresult in some cases.
ProtoTunnel
Fixed diagnostic output in _ProtoTunnelFindTunnel(), when re-matching addr/port, to include correct tunnel
index instead of the max tunnel index.
DirtySDK (PC/XboxOne)
DirtyLibWin
Fixed debug print on QueryPerformanceCounter() failure that was comparing against the wrong result code.
DirtySDK (PS4)
PrivilegeApiPS4
Fixed a logical error that prevented a dialog from being appropriately terminated when aborted and the
reference is not destroyed.
DirtyWebApiPS4
Fixed an issue where we were using the wrong critical section for handling errors which ended up in a
deadlock if another request was made before the response was handled.
DirtySessionManagerPS4
Changed 'gses' control selector to now guard against passing in "INVALID".
VoipHeadsetPS4
Fixed the wrong user index being set when polling for voice.
DirtySDK (PS4/XboxOne)
NetConn
Added ability to pass -1 into NetConnRemoveLocalUser(), in which case an internal lookup will be performed.
Added a new selector 'iusr' than can be used to retrieve the index given the IEAUser UserId.
VoipHeadset
Fixed voipheadsetDeleteLocalUser() to also clear the last headset status.
Fixed a situation where channel configs are applied before we have any registered user with voipheadset.
DirtySDK (PS4/Unix)
DirtyNet
Fixed SocketConnect() to copy the remote address when performing an non-blocking connect
(SCE_NET_EINPROGRESS/SYS_NET_EINPROGRESS/EINPROGRESS) for ps4/ps3/unix.
DirtySDK (Unix)
DirtyLibUnix
Fixed NetTickUsec() to use proper scale for seconds.
DirtySDK (XboxOne)
NetConnXboxOne
Changed the environment to be mapped to the sandbox ID. If it can't be mapped it will default back to TMS
RETAIL -> PROD
CERT -> CERT
EARW.1 -> TEST
EADP Game Services DirtySDK 2015 Winter 1.0.1 - June 05, 2015
This SDK release was built using the following compiler packages:
EA Config 2.19.00
Framework 3.25.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 6.2.12710.0-1-proxy
capilano_config 1.01.00
Kettle kettlesdk 2.508.051-proxy
kettle_config 1.02.00
iPhone ios_config 1.01.05
iphonesdk 7.0-proxy-5
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.07.00
PS3 ps3sdk 470.001-lite
PlayStation3NpEx 470.001
Win32/WinRT/WinPRT
DotNetSDK 4.0
VisualStudio 11.0.50727-proxy
WindowsSDK 8.0.50727-proxy
WindowsPhoneSDK 8.0.9900-proxy
Xenon XenonSDK 2.0.21256.3-proxy
*** Important - ProtoTunnel format modified - backward compatibility broken ***
Th Winter 1.0 release of DirtySDK introduced a new ProtoTunnel protocol version - 1.1. By default, this
is the version used for all platforms except for Xbox 360. ProtoTunnel v1.1 is not compatible with v1.0,
and Xbox 360 is not compatible with v1.1. Please make sure to rebuild any game servers in addition to
game clients when upgrading to this release from a version older than Winter 1.0.
New in this release:
DirtySDK (PS4)
NetConnPS4
Added NetConnRegisterNpStateCallback() to receive callbacks directly from NP State events.
Changes/fixes in this release:
DirtySDK (All)
NetGameLink
Fixed a rare latency estimation issue at start of connection when local and remote clocks are close to but
not quite synchronized.
DirtySDK (PC)
VoipPC
Fixed VoipCommonUpdateRemoteStatus() not being invoked from the VoipThread.
Fixed bPrivileged not defaulting to TRUE.
VoipCommon
Removed unnecessary PC specificities.
DirtySDK (PS3)
VoipHeadsetPS3
Fixed implementation to no longer wait for the user to be in a participating state for acquiring and
playing voice. Without this change, there is some potential for garbled voice at connection establishment.
DirtySDK (PS4)
VoipHeadsetPS4
Changed VoIP muting based on privileges back to be the most restrictive between local users. It will
be reverted back to be muted on a per player basis once Sony provides us a way to check whether VoIP
is being played back on the TV or headsets.
DirtySDK (XboxOne)
ConnApi
Fixed _ConnApiInitClientConnectionState() to not reset ip address if it was already resolved (required for
host migration to succeed with peer hosted topology when p2p voip is active before host migration).
NetConnXboxOne
Fixed the value of the internet connectivity state to reset after a resume to prevent the user from getting
stuck in an offline state after a NetConnDisconnect()/NetConnConnect().
UserListApiXboxOne
Fixed the queueing of UserListApiIsFriendAsync() requests which return success codes but then behaved
strangely when more than one request was active.
Fixed a possible memory leak on shutdown.
DirtySDK (PC/PS3/Unix/XboxOne)
DirtyLib
Fixed a rare thread safety issue in SocketLookup around
refcounting
EADP Game Services DirtySDK 2015 Winter 1.0.0 - April 9, 2015
This SDK release was built using the following compiler packages:
EA Config 2.19.00
Framework 3.25.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 6.2.12128.0-proxy
capilano_config 1.01.00
Kettle kettlesdk 2.000.121-proxy
kettle_config 1.02.00
iPhone ios_config 1.01.05
iphonesdk 7.0-proxy-5
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.07.00
PS3 ps3sdk 450.001-lite
PlayStation3NpEx 450.001
Win32/WinRT/WinPRT
DotNetSDK 4.0
VisualStudio 11.0.50727-proxy
WindowsSDK 8.0.50727-proxy
WindowsPhoneSDK 8.0.9900-proxy
Xenon XenonSDK 2.0.21256.3-proxy
*** Important - Please update your QOS servers from your Blaze server configurations ***
The changes to the qosapi requires the new version of the QOS servers in order to function properly.
Contact GOSOPS for information about the most up to date QOS servers.
*** Important - ProtoTunnel format modified - backward compatibility broken ***
This release of DirtySDK introduces a new ProtoTunnel protocol version - 1.1. By default, this is the
version used for all platforms except for Xbox 360. ProtoTunnel v1.1 is not compatible with v1.0, and
Xbox 360 is not compatible with v1.1. Please make sure to rebuild any game servers in addition to game
clients when upgrading to this release.
New in this release:
DirtySDK (All)
ProtoTunnel
Added support for the new 1.1 version of the ProtoTunnel protocol, with the following features:
- Introduces backwards compatibility for future protocol versions.
- Control packet data data used in handshaking is still authenticated, but is now unencrypted.
- Adds fast matching (and re-matching, when the source addr and/or port changes) of packet data to the
correct endpoint.
- Version 1.0 can still be selected and is the default for Xbox 360 operation. Xbox 360 is not
compatible with 1.1 or later versions of the protocol.
- Version 1.0 is compatible with the previous ProtoTunnel protocol.
CommUDP
Added a packet received flag which can be accessed through NetGameUtilStatus('pkrc'). The flag is stored in
ConnApiClientT GameInfo.uConnFlags. This part of the more specific join error task GOSREQ-184.
DirtySDK (PS3)
NetConnPS3
Added 'nper' selector to NetConnStatus() to allow the user to differentiate a user logging out from PSN
from PSN disconnect.
DirtySDK (XboxOne)
NetConnXboxOne
Added a critical section to protect against NetConnStatus('xusr') being called from the voip thread.
VoipHeadsetXboxOne
Added support for MS voip bystanders (cert requirement).
DirtySDK (Xenon)
ConnApiXenon
Added ConnApiControl('xonl') which can be used to tell ConnApiXenon to no longer attempt game connectivity
but to only perform Xsession management.
Added _ConnApiMoveToNextState() for improved logging of ConnApiXenon state transitions.
Changes/fixes in this release:
DirtySDK (All)
CryptRSA
Refactored to make modular exponentiation an iterative process. This allows it to be spread out over
multiple updates, which is useful as the operation can take significant amounts of clock time and is
blocking. As part of this change, roughly 12k of temporary state that used to be on the stack is now
moved to the RSA state.
Switched to use 64-bit math on Linux and PS4, improving execution time on those platforms.
DirtyCert
Switched to new gosca.ea.com endpoint using certificate issued against GOS2015 CA.
DirtySessionManager
Renamed DirtySessionManagerComplete() to DirtySessionManagerGetSecureIp(), and made that new function
xenon-only.
NetConn
Changed UPnP initialization: if peerport netconn param is not specified, netconn now configures
protoupnp with default port 3659 instead of default port 0.
NetGameDist
Fixed _strNetGameDistDataType to also cover GMDIST_DATA_NODATA.
ProtoHttp
Changes to harden protohttp against multi-threaded calls into update, send, and recv functions from
interfering with one another.
ProtoSSL
Enabled ServerName Hello Extension by default.
Refactored to take advantage of iteratve modular exponentation for SendClientKeyExchange and
SendCertificateVerify operations.
Switched CA provider flag from GOS2013 CA to GOS2015 CA. This allows the new DirtyCert endpoint to
provision CA certificates.
QosApi
Refactored qosapi to improve maintainability, this is extensive changes throughout the
implementation.
Changed qosapi so that the different phases of the qos process (latency, bandwidth, firewall)
do not have dependencies on one another. In the past firewall could only be done after
bandwidth, and qos phases would have an impact on the error status of other qos phases.
Changed qosapi to use the new ip reported by the server rather than the IP address discovered
by the DNS lookup. The old behavior prevented XboxOne from successfully querying the NAT type,
due to DNS round robin issues.
Removed the client to client methods QosApiListen() and QosApiRequest() from the qosapi.
VoipConnection
Fixed incorrect array size for LocalUsers
DirtySDK (PS3)
DirtyNetPS3
Fixed a race condition that causes memory corruption when calling NetConnShutdown() while a
hostname lookup is in progress. NetConnShutdown() now waits until all hostname threads are
finished.
DirtySDK (PS4)
DirtySessionManagerPS4
Removed DirtySessionManagerComplete().
DirtySDK (XboxOne)
NetConnXboxOne
Fixed a case where the connectivity level can be stuck because of a missing notification from
Microsoft. When logging out after a resume event it seems that we sometimes do not receive an
XboxLiveAccess notification when logging back in after the resume. This fix forces a check of
the network state after 5 seconds.
DirtySDK (Xenon)
ConnApiXenon
Changed implementation to guarantee that _ConnApiUpdateDemangle() will never be performed before
XSessionCreate() or XSesssionMigrateHost() completes (on both session host and session members).
Failure to enforce such a serialization can lead to 2 potential problems: secure address being
resolved with an invalid session id (if primary session creation is not complete) or connapi
exiting ST_MIGRATE state prematurely before firing SESSEVENT (if secondary session migration is
not complete).
Changed ConnApiUpdate() such that _ConnApiUpdateDemangle() cannot be called when a session
creation or a session migration is pending.
Removed usage of ConnApiSessionManagerStatus('idle') at the beginning of _ConnApiUpdateDemangle():
no longer required now that calls to _ConnApiUpdateDemangle() from ConnApiUpdate() are limited to
states where it is allowed.
Fixed _ConnApiInitClientList() to properly initialize pConnApi->GameServer.ClientInfo.strTunnelKey
(inspired from connapi.c) This fix is minor because the tunnel key is not used on xenon anyway.
ConnApiXenonSessionManager
Enhanced implementation of ConnApiXenonSessionManagerComplete() to make it clear that
ConnApiXenonSessionManagerGetSecureIp() CANNOT return "in-progress".
Fixed implementation of ConnApiXenonSessionManagerComplete() to return the right secure ip address for the
console specified as input. It used to return pRef->iAddrPrimary which is not guaranteed to match the
specified console.
Renamed ConnApiXenonSessionManagerComplete() to ConnApiXenonSessionManagerGetSecureIp()
Removed ConnApiXenonSessionManagerControl('conn') which was dead code because the 'conn' selector is no
longer supported in DirtySessionManager.
DirtySessionManagerXenon
Renamed DirtySessionManagerComplete() to DirtySessionManagerGetSecureIp().
VoipXenon
Fixed implementation of VoipSetLocalUser() to properly setup the VoipUserT to be passed to
_VoipRegisterLocalTalker(). Without this fix, wrong xuids are registered with XHV resulting
in calls to pXHVEngine->SubmitIncomingChatData() intermittently failing with ERROR_INVALID_FUNCTION.
EADP Game Services DirtySDK 2015 Winter 0.3.0 - March 16, 2015
This SDK release was built using the following compiler packages:
EA Config 2.19.00
Framework 3.25.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.07
Capilano CapilanoSDK 6.2.12128.0-proxy
capilano_config 1.01.00
Kettle kettlesdk 2.000.121-proxy
kettle_config 1.02.00
iPhone ios_config 1.01.05
iphonesdk 7.0-proxy-5
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.07.00
PS3 ps3sdk 450.001-lite
PlayStation3NpEx 450.001
Win32/WinRT/WinPRT
DotNetSDK 4.0
VisualStudio 11.0.50727-proxy
WindowsSDK 8.0.50727-proxy
WindowsPhoneSDK 8.0.9900-proxy
Xenon XenonSDK 2.0.21256.3-proxy
New in this release:
DirtySDK (All)
CommUDP
Added a metric to track packet loss prevented by a redundancy mechanic.
DirtyLib
Added new NetTickUsec() to return microsecond-precision tick counter for profiling purposes.
ProtoSSL
Added GOS2015 SHA2 CA.
Added VeriSign 2008 Universal SHA2 CA.
VoipConnection
Added support for piggy-backing reliable data over voip traffic (data packets and ping packets)
* Added VoipConnectionReliableBroadcastUser() and VoipConnectionReliableBroadcastOpaque().
* Added LinkedReliableDataT.
* Extended VoipConnectionT and VoipConnectionlistT for reliable data support.
* Changed synopsis of VoipConnectRecvVoiceCbT.
VoipHeadset
Added support for piggy-backing reliable data over voip traffic (data packets and ping packets)
* Changed to adapt to change in synopsis of VoipConnectRecvVoiceCbT.
VoipPacket
Added support for piggy-backing reliable data over voip traffic (data packets and ping packets)
* Added new constants, and ReliableDataInfoT, ReliableDataT, ReliableAckT.
VoipPriv
Added support for piggy-backing reliable data over voip traffic (data packets and ping packets)
* Changed implementation of VOIP_CopyUser() to use ds_memcpy_s() instead of ds_strnzcpy().
* Changed VoipUserExT to be conditionally compiled in for XBOXONE only.
DirtySDK (PS4)
DirtyWebApiPS4
Added DirtyWebApiUpdate to issue callbacks from same thread as NetConnIdle. This feature can be enabled
or disabled with 'qcal' control selector. By default the feature is disabled.
DirtySDK (XboxOne)
VoipXboxOne
Added support for piggy-backing reliable data over voip traffic (data packets and ping packets)
* Added call to VoipConnectionReliableBroadcastUser() from VoipActivateLocalUser().
DirtySDK (Xenon)
ConnApiXenon
Removed the dependency of the CONNAPI_MAXCLIENT from the function ConnApiUpdateDemangle().
Changes/fixes in this release:
DirtySDK (iOS)
DirtyLib
Fixed incorrect critical section length for iOS64
DirtySDK (PC)
Build
Fixed compilation warnings for deprecated winsock2 calls with WindowsSDK 8.1
DirtySDK (PS3)
NetConnPS3
Fixed the processing of the SCE_NP_MANAGER_STATUS_OFFLINE event when we are early on in the connection
process to prevent us from becoming stuck in +con when PSN is down.
Fixed the handling of cellNetCtlNetStartDialogUnloadAsync() which was being treated as a synchronous
function.
DirtySDK (PS4)
VoipPS4
Changed the chat permission to applied on a player to player basis when not using the Playstation Camera
DirtySDK (WinRT)
DirtyLibWinRT
Fixed incorrect thread priority initialization in NetLibCreate().
DirtySDK (XboxOne)
NetConnXboxOne
Fixed a build error that occurs when IEAUSER is not used.
PrivilegeApiXboxOne
Fixed a memory stomp.
DirtySDK (Xenon)
Build
Fixed a build break in the post build step of ATGFramework, which is used for the Xenon samples.
ConnApiXenon
Fixed secure address resolution not being done for new connections to be established after host migration.
FriendApiXenon
Fixed a potential issue where friend data could be populated in the incorrect slot.
EADP Game Services DirtySDK 2015 Winter 0.2.0 - January 28, 2015
This SDK release was built using the following compiler packages:
EA Config 2.19.00
Framework 3.25.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.05-1
Capilano CapilanoSDK 6.2.11785.0-proxy
capilano_config 1.00.14
Kettle kettlesdk 2.000.091-proxy
kettle_config 1.01.08
iPhone ios_config 1.01.05
iphonesdk 7.0-proxy-5
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.07.00
PS3 ps3sdk 450.001-lite
PlayStation3NpEx 450.001
Win32/WinRT/WinPRT
DotNetSDK 4.0
VisualStudio 11.0.50727-proxy
WindowsSDK 8.0.50727-proxy
WindowsPhoneSDK 8.0.9900-proxy
Xenon XenonSDK 2.0.21256.3-proxy
New in this release:
DirtySDK (All)
PrivilegeApi
Added PRIVILEGEAPI_PRIV_INVALID privilege for ease of use.
DirtySDK (PC)
VoipSpeex
Added the dll export tag to extern const VoipCodecDefT VoipSpeex_CodecDef.
DirtySDK (PS3)
NetConnPS3
Added logging for connection status changes.
DirtySDK (PS4)
DirtySessionMangerPS4
Added session lock support (prevent user from joining). A PS4 session can not be locked/unlocked
using the 'lock' selector.
NetConnPS4
Added logging for connection status changes.
DirtySDK (XboxOne)
NetConnXboxOne
Removed automatic reset user list support when IEAUSER is used.
Added logging for connection status changes
UserApiXboxOne
Added Support for ProfileChanged Event. Please use the new UserApiNotifyDataT::ProfileUpdateData type
and UserApiNotifyTypeE::USERAPI_NOTIFY_PROFILE_UPDATE to listen for the event.
DirtySDK (Xenon)
NetConnXenon
Added logging for connection status changes
Changes/fixes in this release:
DirtySDK (All)
ConnApi
Fixed a bug where ConnApi will tried to initialize clients with NULL machine address.
DirtyMem
Fixed to export DirtyMemAlloc and DirtyMemFree when building as a DLL.
Added include of <stdlib.h> to prevent malloc() and free() calls for default memory allocators compiling
out when building as a DLL.
DirtyPng
Fixed a wrong usage of ds_strnzcpy that leads to a memory stomp.
NetConn
Fixed NetConnStatus() not propagating the iData parameter to SocketInfo() for selectors that are passed
through.
ProtoHttp
Fixed a memory pointer issue when sending chunked http transaction faster than the network can keep up
that could lead to potentially sending parts of uninitialized memory over the network.
Changed to check status of open keep-alive connection in the DONE state, to detect server-closed
connections when they are closed, rather than waiting until the ProtoHttp ref is used in a new transaction
or destroyed.
VoipConnection
Fixed an integration error. VoipConnectionStartup() will now have a max player check. If for any reason
voip system is not started properly voip setup will be skipped by Blaze.
DirtySDK (iOS)
DirtyLib
Fixed wrong critical section length for iOS64.
DirtySDK (PS4)
DirtyWebApiPS4
Changed priority and scheduling setting of internal threads in favor of less aggressive threading
patterns to avoid negatively impacting game with unnecessary thread switches during game play.
NetConnPS4
Fixed an error which prevents users from going online if PSN does not respond quickly to the parental
settings query.
PrivilegeApiPS4
Fixed an integration error, which caused _PrivilegeApiUpdateDialogStatus callback not to be removed properly.
DirtySDK (XboxOne)
ProtoMangleXboxOne
Fixed a potential crash if a client is removed and re-added while corresponding security association
creation is in progress.
EADP Game Services DirtySDK 2015 Winter 0.1.0 - December 4, 2014
This SDK release was built using the following compiler packages:
EA Config 2.19.00
Framework 3.25.00
Android androidsdk 18-2
androidndk r9c
android_config 1.06.05-1
Capilano CapilanoSDK 6.2.11785.0-proxy
capilano_config 1.00.14
Kettle kettlesdk 2.000.071-proxy
kettle_config 1.01.07
iPhone ios_config 1.01.05
iphonesdk 7.0-proxy-5
OSX UnixGCC 0.05.00
osx_config 1.00.01
Linux/Unix UnixClang 0.07.00
PS3 ps3sdk 450.001-lite
PlayStation3NpEx 450.001
Win32/WinRT/WinPRT
DotNetSDK 4.0
VisualStudio 11.0.50727-proxy
WindowsSDK 8.0.50727-proxy
WindowsPhoneSDK 8.0.9900-proxy
Xenon XenonSDK 2.0.21256.3-proxy
*** Important - Complementary integration guidelines available on Confluence ***
DirtySDK 2015 Winter Upgrade available here:
https://docs.developer.ea.com/display/dirtysock/DirtySDK+2015+Winter+Upgrade+Guide
New in this release:
DirtySDK (All)
ProtoSSL
Added support for AES-128-GCM-SHA256 and AES-256-GCM-SHA384 cipher suites.
Added two obsolete alternate definitions for sha1withRSAEncryption for compatibility with some software
that generates certificates using these object IDs, for example makecert.exe in WindowsSDK.
ProtoTunnel
Enhanced debug logging for the 'bnds' selector.
Voip
Enhanced API for user registration to better support MLU (Multiple Local Users) scenarios. Every local user
should now be registered with the voip sub-system using VoipSetLocalUser() in order for its headset status
info to be available for queries. To additionally get fully functional voip, local users must be further
activated with VoipActivateLocalUser(), which promotes the user to a "participating" state. Basically any
user being pulled into the game should be a participating user. Associated public api impact:
* New synopsis for VoipSetLocalUser()
* New function to promote local users to "participating" state: VoipActivateLocalUser()
VoipGroup
Enhanced VoipGroup api. It was re-aligned with changes to the voip api called out above.
* New function to promote local users to "participating" state: VoipGroupActivateLocalUser()
DirtySDK (PC)
DirtyErrPC
Added DirtyErrPC implementation with pc-specific errors.
ProtoPingPC
Added a new version of protoping for PC, using ICMPSendEcho2() API. This API allows use of ICMP when an
application is run without administrator privilege, which is required for use of RAW sockets employed with
protoping.c.
DirtySDK (PS4)
VoipHeadsetPS4
Enhanced _VoipHeadsetIsLocalVoiceFrameReady() to detect voice readiness quicker.
Added '-pbk' and '+pbk' selectors to better support our voip channel feature under MLU scenarios.
DirtySDK (WinRT/WintPRT)
DirtyLibWinRT
Enhanced NetPrintfCode() to use OutputDebugStringA() instead of OutputDebugStringW().
DirtySDK (XboxOne)
UserApiXboxOne
Added support for the 'avsz' selector. Now different profile pictures sizes can be fetched.
VoipXboxOne
Added selectors:
VoipStatus 'pcac' - returns true if party chat is active
VoipStatus 'pcsu' - returns true if party chat is currently suspended
VoipControl 'pcsu' - takes iValue as a bool, TRUE suspend party chat, FALSE resume it
In order for VoipControl 'pcsu' to work you must add to the appxmanifest.xml:
<mx:Extension Category="xbox.multiplayer">
<mx:XboxMultiplayer CanSuppressPartyChat="true" />
</mx:Extension>
Changes/fixes in this release:
DirtySDK (All)
General
Replaced APIs deprecated by Microsoft with generic equivalents.
ConnApi
Changed synopsis of ConnApiOnline(): it no longer has a pSelfAddr parameter.
Changed ConnApiUserInfoT.uClientFlags to ConnApiUserInfoT.uFlags.
Changed ConnApiClientInfoT.uMachineId to ConnApiCLientInfoT.uId.
Removed multiple virtual machine mode: connapi 'mvtm' status and control selectors no longer exist.
The implementation is now multiple-virtual-machine capable by default.
Removed ConnApiUserInfoT, ConnApiAddUser() and ConnApiRemoveUser() for all platforms except xbox360.
Removed ConnApiFindClient(), then renamed ConnApiFindClientById() to ConnApiFindClient().
Removed ConnApiClientInfoT.strUniqueId
Removed _ConnApiDefaultCallback() and made the debug logging client-centric instead of user-centric.
DirtyNet
Changed all dirtynet files to log unsupported status selectors the same way.
NetGameLink
Changed implementation to avoid code duplication: moved packet loss calculation logics into a static
function.
Changed the names of several member variables in the NetGameLinkStatT structure. The changes are listed below:
bps to outbps
rps to outrps
nps to outnps
pps to outpps
rpps to outrpps
ProtoSSL
Changed to request TLS1.2 instead of TLS1.1. Servers are still allowed to select any version from TLS1.2
down to SSLv3.
Changed to use 64-bit time for certificate expiration checking, so certificates created with expiration
times far in the future won't fail validation.
Changed to harden protossl against multi-threaded use causing obscure secure failures.
VoipConnection
Removed platform specificities in _VoipConnectionInit().
VoipPacket
Changed value of VOIP_PACKET_STATUS_FLAG_METADATA from 2 to 1.
DirtySDK (PS4)
DirtyWebApiPS4
Removed DirtyWebApiCreate()/DirtyWebApiCreateEx() and renamed DirtyWebApiCreateEx2() to
DirtyWebApiCreate().
Changed WebApi threads to only wakeup when there are jobs queued.
VoipHeadsetPS4
Fixed establishment of connections between a decoder port and all local speaker ports when a user is added
after a decoder was created.
DirtySDK (XboxOne)
DirtyNetXboxOne
Fixed _SocketAddrMapGet() to no longer include the port value when trying to match an input ipv6 address
with an existing mapping. This change is required for multi-hub test bench to be functional on xboxone:
because hubs all bind to different game port, the inbound traffic source port may not be same as the ipv6
address mapped when resolving secure device address for the local console.
VoipHeadsetXboxOne
Deprecated support for pre-March2014 XDKs (_XDK_VER < 10698).
Replaced VOIPHEADSET_VOICELIB_DEBUG with VOIPHEADSET_DEBUG.
DirtySDK (Xenon)
ConnnApiXenon
Changed internal usage of some control selectors: moved call to ConnApiXenonManagerControl('self')
and VoipGroupControl('lusr') from ConnApiOnline() to _ConnApiInitClientList()
Fixed connapixenon to properly update the remote tunnel port with the peer's internally bound port
when the internal address (i.e. internal to NAT scope) is used to reach that peer.
Fixed a logical error forcing the voip connection attempt to fail early.