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. Xbox.Game.Chat.2.Cpp.API, Version=8.0 * 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 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: versus 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 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: 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.