added updated required includes
This commit is contained in:
1 parent
0158f733b8
commit
76d7081547
5 files changed
+3171
No files matched your search
@@ -0,0 +1,413 @@
|
|||||||
|
#if defined _SteamWorks_Included
|
||||||
|
#endinput
|
||||||
|
#endif
|
||||||
|
#define _SteamWorks_Included
|
||||||
|
|
||||||
|
/* results from UserHasLicenseForApp */
|
||||||
|
enum EUserHasLicenseForAppResult
|
||||||
|
{
|
||||||
|
k_EUserHasLicenseResultHasLicense = 0, // User has a license for specified app
|
||||||
|
k_EUserHasLicenseResultDoesNotHaveLicense = 1, // User does not have a license for the specified app
|
||||||
|
k_EUserHasLicenseResultNoAuth = 2, // User has not been authenticated
|
||||||
|
};
|
||||||
|
|
||||||
|
/* General result codes */
|
||||||
|
enum EResult
|
||||||
|
{
|
||||||
|
k_EResultOK = 1, // success
|
||||||
|
k_EResultFail = 2, // generic failure
|
||||||
|
k_EResultNoConnection = 3, // no/failed network connection
|
||||||
|
// k_EResultNoConnectionRetry = 4, // OBSOLETE - removed
|
||||||
|
k_EResultInvalidPassword = 5, // password/ticket is invalid
|
||||||
|
k_EResultLoggedInElsewhere = 6, // same user logged in elsewhere
|
||||||
|
k_EResultInvalidProtocolVer = 7, // protocol version is incorrect
|
||||||
|
k_EResultInvalidParam = 8, // a parameter is incorrect
|
||||||
|
k_EResultFileNotFound = 9, // file was not found
|
||||||
|
k_EResultBusy = 10, // called method busy - action not taken
|
||||||
|
k_EResultInvalidState = 11, // called object was in an invalid state
|
||||||
|
k_EResultInvalidName = 12, // name is invalid
|
||||||
|
k_EResultInvalidEmail = 13, // email is invalid
|
||||||
|
k_EResultDuplicateName = 14, // name is not unique
|
||||||
|
k_EResultAccessDenied = 15, // access is denied
|
||||||
|
k_EResultTimeout = 16, // operation timed out
|
||||||
|
k_EResultBanned = 17, // VAC2 banned
|
||||||
|
k_EResultAccountNotFound = 18, // account not found
|
||||||
|
k_EResultInvalidSteamID = 19, // steamID is invalid
|
||||||
|
k_EResultServiceUnavailable = 20, // The requested service is currently unavailable
|
||||||
|
k_EResultNotLoggedOn = 21, // The user is not logged on
|
||||||
|
k_EResultPending = 22, // Request is pending (may be in process, or waiting on third party)
|
||||||
|
k_EResultEncryptionFailure = 23, // Encryption or Decryption failed
|
||||||
|
k_EResultInsufficientPrivilege = 24, // Insufficient privilege
|
||||||
|
k_EResultLimitExceeded = 25, // Too much of a good thing
|
||||||
|
k_EResultRevoked = 26, // Access has been revoked (used for revoked guest passes)
|
||||||
|
k_EResultExpired = 27, // License/Guest pass the user is trying to access is expired
|
||||||
|
k_EResultAlreadyRedeemed = 28, // Guest pass has already been redeemed by account, cannot be acked again
|
||||||
|
k_EResultDuplicateRequest = 29, // The request is a duplicate and the action has already occurred in the past, ignored this time
|
||||||
|
k_EResultAlreadyOwned = 30, // All the games in this guest pass redemption request are already owned by the user
|
||||||
|
k_EResultIPNotFound = 31, // IP address not found
|
||||||
|
k_EResultPersistFailed = 32, // failed to write change to the data store
|
||||||
|
k_EResultLockingFailed = 33, // failed to acquire access lock for this operation
|
||||||
|
k_EResultLogonSessionReplaced = 34,
|
||||||
|
k_EResultConnectFailed = 35,
|
||||||
|
k_EResultHandshakeFailed = 36,
|
||||||
|
k_EResultIOFailure = 37,
|
||||||
|
k_EResultRemoteDisconnect = 38,
|
||||||
|
k_EResultShoppingCartNotFound = 39, // failed to find the shopping cart requested
|
||||||
|
k_EResultBlocked = 40, // a user didn't allow it
|
||||||
|
k_EResultIgnored = 41, // target is ignoring sender
|
||||||
|
k_EResultNoMatch = 42, // nothing matching the request found
|
||||||
|
k_EResultAccountDisabled = 43,
|
||||||
|
k_EResultServiceReadOnly = 44, // this service is not accepting content changes right now
|
||||||
|
k_EResultAccountNotFeatured = 45, // account doesn't have value, so this feature isn't available
|
||||||
|
k_EResultAdministratorOK = 46, // allowed to take this action, but only because requester is admin
|
||||||
|
k_EResultContentVersion = 47, // A Version mismatch in content transmitted within the Steam protocol.
|
||||||
|
k_EResultTryAnotherCM = 48, // The current CM can't service the user making a request, user should try another.
|
||||||
|
k_EResultPasswordRequiredToKickSession = 49,// You are already logged in elsewhere, this cached credential login has failed.
|
||||||
|
k_EResultAlreadyLoggedInElsewhere = 50, // You are already logged in elsewhere, you must wait
|
||||||
|
k_EResultSuspended = 51, // Long running operation (content download) suspended/paused
|
||||||
|
k_EResultCancelled = 52, // Operation canceled (typically by user: content download)
|
||||||
|
k_EResultDataCorruption = 53, // Operation canceled because data is ill formed or unrecoverable
|
||||||
|
k_EResultDiskFull = 54, // Operation canceled - not enough disk space.
|
||||||
|
k_EResultRemoteCallFailed = 55, // an remote call or IPC call failed
|
||||||
|
k_EResultPasswordUnset = 56, // Password could not be verified as it's unset server side
|
||||||
|
k_EResultExternalAccountUnlinked = 57, // External account (PSN, Facebook...) is not linked to a Steam account
|
||||||
|
k_EResultPSNTicketInvalid = 58, // PSN ticket was invalid
|
||||||
|
k_EResultExternalAccountAlreadyLinked = 59, // External account (PSN, Facebook...) is already linked to some other account, must explicitly request to replace/delete the link first
|
||||||
|
k_EResultRemoteFileConflict = 60, // The sync cannot resume due to a conflict between the local and remote files
|
||||||
|
k_EResultIllegalPassword = 61, // The requested new password is not legal
|
||||||
|
k_EResultSameAsPreviousValue = 62, // new value is the same as the old one ( secret question and answer )
|
||||||
|
k_EResultAccountLogonDenied = 63, // account login denied due to 2nd factor authentication failure
|
||||||
|
k_EResultCannotUseOldPassword = 64, // The requested new password is not legal
|
||||||
|
k_EResultInvalidLoginAuthCode = 65, // account login denied due to auth code invalid
|
||||||
|
k_EResultAccountLogonDeniedNoMail = 66, // account login denied due to 2nd factor auth failure - and no mail has been sent
|
||||||
|
k_EResultHardwareNotCapableOfIPT = 67, //
|
||||||
|
k_EResultIPTInitError = 68, //
|
||||||
|
k_EResultParentalControlRestricted = 69, // operation failed due to parental control restrictions for current user
|
||||||
|
k_EResultFacebookQueryError = 70, // Facebook query returned an error
|
||||||
|
k_EResultExpiredLoginAuthCode = 71, // account login denied due to auth code expired
|
||||||
|
k_EResultIPLoginRestrictionFailed = 72,
|
||||||
|
k_EResultAccountLockedDown = 73,
|
||||||
|
k_EResultAccountLogonDeniedVerifiedEmailRequired = 74,
|
||||||
|
k_EResultNoMatchingURL = 75,
|
||||||
|
k_EResultBadResponse = 76, // parse failure, missing field, etc.
|
||||||
|
k_EResultRequirePasswordReEntry = 77, // The user cannot complete the action until they re-enter their password
|
||||||
|
k_EResultValueOutOfRange = 78, // the value entered is outside the acceptable range
|
||||||
|
k_EResultUnexpectedError = 79, // something happened that we didn't expect to ever happen
|
||||||
|
k_EResultDisabled = 80, // The requested service has been configured to be unavailable
|
||||||
|
k_EResultInvalidCEGSubmission = 81, // The set of files submitted to the CEG server are not valid !
|
||||||
|
k_EResultRestrictedDevice = 82, // The device being used is not allowed to perform this action
|
||||||
|
k_EResultRegionLocked = 83, // The action could not be complete because it is region restricted
|
||||||
|
k_EResultRateLimitExceeded = 84, // Temporary rate limit exceeded, try again later, different from k_EResultLimitExceeded which may be permanent
|
||||||
|
k_EResultAccountLoginDeniedNeedTwoFactor = 85, // Need two-factor code to login
|
||||||
|
k_EResultItemDeleted = 86, // The thing we're trying to access has been deleted
|
||||||
|
k_EResultAccountLoginDeniedThrottle = 87, // login attempt failed, try to throttle response to possible attacker
|
||||||
|
k_EResultTwoFactorCodeMismatch = 88, // two factor code mismatch
|
||||||
|
k_EResultTwoFactorActivationCodeMismatch = 89, // activation code for two-factor didn't match
|
||||||
|
k_EResultAccountAssociatedToMultiplePartners = 90, // account has been associated with multiple partners
|
||||||
|
k_EResultNotModified = 91, // data not modified
|
||||||
|
k_EResultNoMobileDevice = 92, // the account does not have a mobile device associated with it
|
||||||
|
k_EResultTimeNotSynced = 93, // the time presented is out of range or tolerance
|
||||||
|
k_EResultSmsCodeFailed = 94, // SMS code failure (no match, none pending, etc.)
|
||||||
|
k_EResultAccountLimitExceeded = 95, // Too many accounts access this resource
|
||||||
|
k_EResultAccountActivityLimitExceeded = 96, // Too many changes to this account
|
||||||
|
k_EResultPhoneActivityLimitExceeded = 97, // Too many changes to this phone
|
||||||
|
k_EResultRefundToWallet = 98, // Cannot refund to payment method, must use wallet
|
||||||
|
k_EResultEmailSendFailure = 99, // Cannot send an email
|
||||||
|
k_EResultNotSettled = 100, // Can't perform operation till payment has settled
|
||||||
|
k_EResultNeedCaptcha = 101, // Needs to provide a valid captcha
|
||||||
|
k_EResultGSLTDenied = 102, // a game server login token owned by this token's owner has been banned
|
||||||
|
k_EResultGSOwnerDenied = 103, // game server owner is denied for other reason (account lock, community ban, vac ban, missing phone)
|
||||||
|
k_EResultInvalidItemType = 104 // the type of thing we were requested to act on is invalid
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This enum is used in client API methods, do not re-number existing values. */
|
||||||
|
enum EHTTPMethod
|
||||||
|
{
|
||||||
|
k_EHTTPMethodInvalid = 0,
|
||||||
|
k_EHTTPMethodGET,
|
||||||
|
k_EHTTPMethodHEAD,
|
||||||
|
k_EHTTPMethodPOST,
|
||||||
|
k_EHTTPMethodPUT,
|
||||||
|
k_EHTTPMethodDELETE,
|
||||||
|
k_EHTTPMethodOPTIONS,
|
||||||
|
k_EHTTPMethodPATCH,
|
||||||
|
|
||||||
|
// The remaining HTTP methods are not yet supported, per rfc2616 section 5.1.1 only GET and HEAD are required for
|
||||||
|
// a compliant general purpose server. We'll likely add more as we find uses for them.
|
||||||
|
|
||||||
|
// k_EHTTPMethodTRACE,
|
||||||
|
// k_EHTTPMethodCONNECT
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* HTTP Status codes that the server can send in response to a request, see rfc2616 section 10.3 for descriptions
|
||||||
|
of each of these. */
|
||||||
|
enum EHTTPStatusCode
|
||||||
|
{
|
||||||
|
// Invalid status code (this isn't defined in HTTP, used to indicate unset in our code)
|
||||||
|
k_EHTTPStatusCodeInvalid = 0,
|
||||||
|
|
||||||
|
// Informational codes
|
||||||
|
k_EHTTPStatusCode100Continue = 100,
|
||||||
|
k_EHTTPStatusCode101SwitchingProtocols = 101,
|
||||||
|
|
||||||
|
// Success codes
|
||||||
|
k_EHTTPStatusCode200OK = 200,
|
||||||
|
k_EHTTPStatusCode201Created = 201,
|
||||||
|
k_EHTTPStatusCode202Accepted = 202,
|
||||||
|
k_EHTTPStatusCode203NonAuthoritative = 203,
|
||||||
|
k_EHTTPStatusCode204NoContent = 204,
|
||||||
|
k_EHTTPStatusCode205ResetContent = 205,
|
||||||
|
k_EHTTPStatusCode206PartialContent = 206,
|
||||||
|
|
||||||
|
// Redirection codes
|
||||||
|
k_EHTTPStatusCode300MultipleChoices = 300,
|
||||||
|
k_EHTTPStatusCode301MovedPermanently = 301,
|
||||||
|
k_EHTTPStatusCode302Found = 302,
|
||||||
|
k_EHTTPStatusCode303SeeOther = 303,
|
||||||
|
k_EHTTPStatusCode304NotModified = 304,
|
||||||
|
k_EHTTPStatusCode305UseProxy = 305,
|
||||||
|
//k_EHTTPStatusCode306Unused = 306, (used in old HTTP spec, now unused in 1.1)
|
||||||
|
k_EHTTPStatusCode307TemporaryRedirect = 307,
|
||||||
|
|
||||||
|
// Error codes
|
||||||
|
k_EHTTPStatusCode400BadRequest = 400,
|
||||||
|
k_EHTTPStatusCode401Unauthorized = 401, // You probably want 403 or something else. 401 implies you're sending a WWW-Authenticate header and the client can sent an Authorization header in response.
|
||||||
|
k_EHTTPStatusCode402PaymentRequired = 402, // This is reserved for future HTTP specs, not really supported by clients
|
||||||
|
k_EHTTPStatusCode403Forbidden = 403,
|
||||||
|
k_EHTTPStatusCode404NotFound = 404,
|
||||||
|
k_EHTTPStatusCode405MethodNotAllowed = 405,
|
||||||
|
k_EHTTPStatusCode406NotAcceptable = 406,
|
||||||
|
k_EHTTPStatusCode407ProxyAuthRequired = 407,
|
||||||
|
k_EHTTPStatusCode408RequestTimeout = 408,
|
||||||
|
k_EHTTPStatusCode409Conflict = 409,
|
||||||
|
k_EHTTPStatusCode410Gone = 410,
|
||||||
|
k_EHTTPStatusCode411LengthRequired = 411,
|
||||||
|
k_EHTTPStatusCode412PreconditionFailed = 412,
|
||||||
|
k_EHTTPStatusCode413RequestEntityTooLarge = 413,
|
||||||
|
k_EHTTPStatusCode414RequestURITooLong = 414,
|
||||||
|
k_EHTTPStatusCode415UnsupportedMediaType = 415,
|
||||||
|
k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
|
||||||
|
k_EHTTPStatusCode417ExpectationFailed = 417,
|
||||||
|
k_EHTTPStatusCode4xxUnknown = 418, // 418 is reserved, so we'll use it to mean unknown
|
||||||
|
k_EHTTPStatusCode429TooManyRequests = 429,
|
||||||
|
|
||||||
|
// Server error codes
|
||||||
|
k_EHTTPStatusCode500InternalServerError = 500,
|
||||||
|
k_EHTTPStatusCode501NotImplemented = 501,
|
||||||
|
k_EHTTPStatusCode502BadGateway = 502,
|
||||||
|
k_EHTTPStatusCode503ServiceUnavailable = 503,
|
||||||
|
k_EHTTPStatusCode504GatewayTimeout = 504,
|
||||||
|
k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
|
||||||
|
k_EHTTPStatusCode5xxUnknown = 599,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* list of possible return values from the ISteamGameCoordinator API */
|
||||||
|
enum EGCResults
|
||||||
|
{
|
||||||
|
k_EGCResultOK = 0,
|
||||||
|
k_EGCResultNoMessage = 1, // There is no message in the queue
|
||||||
|
k_EGCResultBufferTooSmall = 2, // The buffer is too small for the requested message
|
||||||
|
k_EGCResultNotLoggedOn = 3, // The client is not logged onto Steam
|
||||||
|
k_EGCResultInvalidMessage = 4, // Something was wrong with the message being sent with SendMessage
|
||||||
|
};
|
||||||
|
|
||||||
|
native bool:SteamWorks_IsVACEnabled();
|
||||||
|
native bool:SteamWorks_GetPublicIP(ipaddr[4]);
|
||||||
|
native SteamWorks_GetPublicIPCell();
|
||||||
|
native bool:SteamWorks_IsLoaded();
|
||||||
|
native bool:SteamWorks_SetGameData(const String:sData[]);
|
||||||
|
native bool:SteamWorks_SetGameDescription(const String:sDesc[]);
|
||||||
|
native bool:SteamWorks_SetMapName(const String:sMapName[]);
|
||||||
|
native bool:SteamWorks_IsConnected();
|
||||||
|
native bool:SteamWorks_SetRule(const String:sKey[], const String:sValue[]);
|
||||||
|
native bool:SteamWorks_ClearRules();
|
||||||
|
native bool:SteamWorks_ForceHeartbeat();
|
||||||
|
native bool:SteamWorks_GetUserGroupStatus(client, groupid);
|
||||||
|
native bool:SteamWorks_GetUserGroupStatusAuthID(authid, groupid);
|
||||||
|
|
||||||
|
native EUserHasLicenseForAppResult:SteamWorks_HasLicenseForApp(client, app);
|
||||||
|
native EUserHasLicenseForAppResult:SteamWorks_HasLicenseForAppId(authid, app);
|
||||||
|
native SteamWorks_GetClientSteamID(client, String:sSteamID[], length);
|
||||||
|
|
||||||
|
native bool:SteamWorks_RequestStatsAuthID(authid, appid);
|
||||||
|
native bool:SteamWorks_RequestStats(client, appid);
|
||||||
|
native bool:SteamWorks_GetStatCell(client, const String:sKey[], &value);
|
||||||
|
native bool:SteamWorks_GetStatAuthIDCell(authid, const String:sKey[], &value);
|
||||||
|
native bool:SteamWorks_GetStatFloat(client, const String:sKey[], &Float:value);
|
||||||
|
native bool:SteamWorks_GetStatAuthIDFloat(authid, const String:sKey[], &Float:value);
|
||||||
|
|
||||||
|
native Handle:SteamWorks_CreateHTTPRequest(EHTTPMethod:method, const String:sURL[]);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestContextValue(Handle:hHandle, any:data1, any:data2=0);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestNetworkActivityTimeout(Handle:hHandle, timeout);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestHeaderValue(Handle:hHandle, const String:sName[], const String:sValue[]);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestGetOrPostParameter(Handle:hHandle, const String:sName[], const String:sValue[]);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestUserAgentInfo(Handle:hHandle, const String:sUserAgentInfo[]);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestRequiresVerifiedCertificate(Handle:hHandle, bool:bRequireVerifiedCertificate);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestAbsoluteTimeoutMS(Handle:hHandle, unMilliseconds);
|
||||||
|
|
||||||
|
#if SOURCEMOD_V_MAJOR >= 1 && SOURCEMOD_V_MINOR >= 9
|
||||||
|
typeset SteamWorksHTTPRequestCompleted
|
||||||
|
{
|
||||||
|
function void (Handle hRequest, bool bFailure, bool bRequestSuccessful, EHTTPStatusCode eStatusCode);
|
||||||
|
function void (Handle hRequest, bool bFailure, bool bRequestSuccessful, EHTTPStatusCode eStatusCode, any data1);
|
||||||
|
function void (Handle hRequest, bool bFailure, bool bRequestSuccessful, EHTTPStatusCode eStatusCode, any data1, any data2);
|
||||||
|
};
|
||||||
|
|
||||||
|
typeset SteamWorksHTTPHeadersReceived
|
||||||
|
{
|
||||||
|
function void (Handle hRequest, bool bFailure);
|
||||||
|
function void (Handle hRequest, bool bFailure, any data1);
|
||||||
|
function void (Handle hRequest, bool bFailure, any data1, any data2);
|
||||||
|
};
|
||||||
|
|
||||||
|
typeset SteamWorksHTTPDataReceived
|
||||||
|
{
|
||||||
|
function void (Handle hRequest, bool bFailure, int offset, int bytesreceived);
|
||||||
|
function void (Handle hRequest, bool bFailure, int offset, int bytesreceived, any data1);
|
||||||
|
function void (Handle hRequest, bool bFailure, int offset, int bytesreceived, any data1, any data2);
|
||||||
|
};
|
||||||
|
|
||||||
|
typeset SteamWorksHTTPBodyCallback
|
||||||
|
{
|
||||||
|
function void (const char sData[]);
|
||||||
|
function void (const char sData[], any value);
|
||||||
|
function void (const int data[], any value, int datalen);
|
||||||
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
funcenum SteamWorksHTTPRequestCompleted
|
||||||
|
{
|
||||||
|
public(Handle:hRequest, bool:bFailure, bool:bRequestSuccessful, EHTTPStatusCode:eStatusCode),
|
||||||
|
public(Handle:hRequest, bool:bFailure, bool:bRequestSuccessful, EHTTPStatusCode:eStatusCode, any:data1),
|
||||||
|
public(Handle:hRequest, bool:bFailure, bool:bRequestSuccessful, EHTTPStatusCode:eStatusCode, any:data1, any:data2)
|
||||||
|
};
|
||||||
|
|
||||||
|
funcenum SteamWorksHTTPHeadersReceived
|
||||||
|
{
|
||||||
|
public(Handle:hRequest, bool:bFailure),
|
||||||
|
public(Handle:hRequest, bool:bFailure, any:data1),
|
||||||
|
public(Handle:hRequest, bool:bFailure, any:data1, any:data2)
|
||||||
|
};
|
||||||
|
|
||||||
|
funcenum SteamWorksHTTPDataReceived
|
||||||
|
{
|
||||||
|
public(Handle:hRequest, bool:bFailure, offset, bytesreceived),
|
||||||
|
public(Handle:hRequest, bool:bFailure, offset, bytesreceived, any:data1),
|
||||||
|
public(Handle:hRequest, bool:bFailure, offset, bytesreceived, any:data1, any:data2)
|
||||||
|
};
|
||||||
|
|
||||||
|
funcenum SteamWorksHTTPBodyCallback
|
||||||
|
{
|
||||||
|
public(const String:sData[]),
|
||||||
|
public(const String:sData[], any:value),
|
||||||
|
public(const data[], any:value, datalen)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
native bool:SteamWorks_SetHTTPCallbacks(Handle:hHandle, SteamWorksHTTPRequestCompleted:fCompleted = INVALID_FUNCTION, SteamWorksHTTPHeadersReceived:fHeaders = INVALID_FUNCTION, SteamWorksHTTPDataReceived:fData = INVALID_FUNCTION, Handle:hCalling = INVALID_HANDLE);
|
||||||
|
native bool:SteamWorks_SendHTTPRequest(Handle:hRequest);
|
||||||
|
native bool:SteamWorks_SendHTTPRequestAndStreamResponse(Handle:hRequest);
|
||||||
|
native bool:SteamWorks_DeferHTTPRequest(Handle:hRequest);
|
||||||
|
native bool:SteamWorks_PrioritizeHTTPRequest(Handle:hRequest);
|
||||||
|
native bool:SteamWorks_GetHTTPResponseHeaderSize(Handle:hRequest, const String:sHeader[], &size);
|
||||||
|
native bool:SteamWorks_GetHTTPResponseHeaderValue(Handle:hRequest, const String:sHeader[], String:sValue[], size);
|
||||||
|
native bool:SteamWorks_GetHTTPResponseBodySize(Handle:hRequest, &size);
|
||||||
|
native bool:SteamWorks_GetHTTPResponseBodyData(Handle:hRequest, String:sBody[], length);
|
||||||
|
native bool:SteamWorks_GetHTTPStreamingResponseBodyData(Handle:hRequest, cOffset, String:sBody[], length);
|
||||||
|
native bool:SteamWorks_GetHTTPDownloadProgressPct(Handle:hRequest, &Float:percent);
|
||||||
|
native bool:SteamWorks_GetHTTPRequestWasTimedOut(Handle:hRequest, &bool:bWasTimedOut);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestRawPostBody(Handle:hRequest, const String:sContentType[], const String:sBody[], bodylen);
|
||||||
|
native bool:SteamWorks_SetHTTPRequestRawPostBodyFromFile(Handle:hRequest, const String:sContentType[], const String:sFileName[]);
|
||||||
|
|
||||||
|
native bool:SteamWorks_GetHTTPResponseBodyCallback(Handle:hRequest, SteamWorksHTTPBodyCallback:fCallback, any:data = 0, Handle:hPlugin = INVALID_HANDLE); /* Look up, moved definition for 1.7+ compat. */
|
||||||
|
native bool:SteamWorks_WriteHTTPResponseBodyToFile(Handle:hRequest, const String:sFileName[]);
|
||||||
|
|
||||||
|
forward SW_OnValidateClient(ownerauthid, authid);
|
||||||
|
forward SteamWorks_OnValidateClient(ownerauthid, authid);
|
||||||
|
forward SteamWorks_SteamServersConnected();
|
||||||
|
forward SteamWorks_SteamServersConnectFailure(EResult:result);
|
||||||
|
forward SteamWorks_SteamServersDisconnected(EResult:result);
|
||||||
|
|
||||||
|
forward Action:SteamWorks_RestartRequested();
|
||||||
|
forward SteamWorks_TokenRequested(String:sToken[], maxlen);
|
||||||
|
|
||||||
|
forward SteamWorks_OnClientGroupStatus(authid, groupid, bool:isMember, bool:isOfficer);
|
||||||
|
|
||||||
|
forward EGCResults:SteamWorks_GCSendMessage(unMsgType, const String:pubData[], cubData);
|
||||||
|
forward SteamWorks_GCMsgAvailable(cubData);
|
||||||
|
forward EGCResults:SteamWorks_GCRetrieveMessage(punMsgType, const String:pubDest[], cubDest, pcubMsgSize);
|
||||||
|
|
||||||
|
native EGCResults:SteamWorks_SendMessageToGC(unMsgType, const String:pubData[], cubData);
|
||||||
|
|
||||||
|
public Extension:__ext_SteamWorks =
|
||||||
|
{
|
||||||
|
name = "SteamWorks",
|
||||||
|
file = "SteamWorks.ext",
|
||||||
|
#if defined AUTOLOAD_EXTENSIONS
|
||||||
|
autoload = 1,
|
||||||
|
#else
|
||||||
|
autoload = 0,
|
||||||
|
#endif
|
||||||
|
#if defined REQUIRE_EXTENSIONS
|
||||||
|
required = 1,
|
||||||
|
#else
|
||||||
|
required = 0,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#if !defined REQUIRE_EXTENSIONS
|
||||||
|
public __ext_SteamWorks_SetNTVOptional()
|
||||||
|
{
|
||||||
|
MarkNativeAsOptional("SteamWorks_IsVACEnabled");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetPublicIP");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetPublicIPCell");
|
||||||
|
MarkNativeAsOptional("SteamWorks_IsLoaded");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetGameData");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetGameDescription");
|
||||||
|
MarkNativeAsOptional("SteamWorks_IsConnected");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetRule");
|
||||||
|
MarkNativeAsOptional("SteamWorks_ClearRules");
|
||||||
|
MarkNativeAsOptional("SteamWorks_ForceHeartbeat");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetUserGroupStatus");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetUserGroupStatusAuthID");
|
||||||
|
|
||||||
|
MarkNativeAsOptional("SteamWorks_HasLicenseForApp");
|
||||||
|
MarkNativeAsOptional("SteamWorks_HasLicenseForAppId");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetClientSteamID");
|
||||||
|
|
||||||
|
MarkNativeAsOptional("SteamWorks_RequestStatsAuthID");
|
||||||
|
MarkNativeAsOptional("SteamWorks_RequestStats");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetStatCell");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetStatAuthIDCell");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetStatFloat");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetStatAuthIDFloat");
|
||||||
|
|
||||||
|
MarkNativeAsOptional("SteamWorks_SendMessageToGC");
|
||||||
|
|
||||||
|
MarkNativeAsOptional("SteamWorks_CreateHTTPRequest");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetHTTPRequestContextValue");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetHTTPRequestNetworkActivityTimeout");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetHTTPRequestHeaderValue");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetHTTPRequestGetOrPostParameter");
|
||||||
|
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetHTTPCallbacks");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SendHTTPRequest");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SendHTTPRequestAndStreamResponse");
|
||||||
|
MarkNativeAsOptional("SteamWorks_DeferHTTPRequest");
|
||||||
|
MarkNativeAsOptional("SteamWorks_PrioritizeHTTPRequest");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetHTTPResponseHeaderSize");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetHTTPResponseHeaderValue");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodySize");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodyData");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetHTTPStreamingResponseBodyData");
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetHTTPDownloadProgressPct");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetHTTPRequestRawPostBody");
|
||||||
|
MarkNativeAsOptional("SteamWorks_SetHTTPRequestRawPostBodyFromFile");
|
||||||
|
|
||||||
|
MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodyCallback");
|
||||||
|
MarkNativeAsOptional("SteamWorks_WriteHTTPResponseBodyToFile");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,565 @@
|
|||||||
|
|
||||||
|
#if defined _cURL_included
|
||||||
|
#endinput
|
||||||
|
#endif
|
||||||
|
#define _cURL_included
|
||||||
|
|
||||||
|
#include <cURL_header>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
========================================
|
||||||
|
The Following CURLOPT_* NOT support
|
||||||
|
ERRORBUFFER // use curl_get_error_buffer
|
||||||
|
WRITEINFO // ???
|
||||||
|
PROGRESSFUNCTION // unused
|
||||||
|
PROGRESSDATA // same
|
||||||
|
HEADERFUNCTION // unused
|
||||||
|
DEBUGFUNCTION // unused
|
||||||
|
DEBUGDATA // same
|
||||||
|
SHARE // unsupport
|
||||||
|
PRIVATE // unsupport
|
||||||
|
SSL_CTX_FUNC // unused
|
||||||
|
SSL_CTX_DATA // same
|
||||||
|
IOCTLFUNCTION // unused
|
||||||
|
IOCTLDATA // same
|
||||||
|
CONV_FROM_NETWORK_FUNC // unused
|
||||||
|
CONV_TO_NETWORK_FUNC // unused
|
||||||
|
CONV_FROM_UTF8_FUNC // unused
|
||||||
|
SOCKOPTFUNCTION // unused
|
||||||
|
SOCKOPTDATA // unused
|
||||||
|
OPENSOCKETFUNCTION // used
|
||||||
|
OPENSOCKETDATA // used
|
||||||
|
COPYPOSTFIELDS // unsupport
|
||||||
|
SEEKFUNCTION // unused
|
||||||
|
SEEKDATA // unused
|
||||||
|
SOCKS5_GSSAPI_SERVICE // unsupport
|
||||||
|
SOCKS5_GSSAPI_NEC // unsupport
|
||||||
|
SSH_KEYFUNCTION // unsupport
|
||||||
|
SSH_KEYDATA // unsupport
|
||||||
|
INTERLEAVEFUNCTION // unsupport
|
||||||
|
CHUNK_BGN_FUNC // unsupport
|
||||||
|
CHUNK_END_FUNC // unsupport
|
||||||
|
FNMATCH_FUNC // unsupport
|
||||||
|
CHUNK_DATA // unsupport
|
||||||
|
FNMATCH_DATA // unsupport
|
||||||
|
TLSAUTH_USERNAME // unsupport, require tls-srp
|
||||||
|
TLSAUTH_PASSWORD // unsupport, require tls-srp
|
||||||
|
TLSAUTH_TYPE // unsupport, require tls-srp
|
||||||
|
CLOSESOCKETFUNCTION // unsupport
|
||||||
|
CLOSESOCKETDATA // unsupport
|
||||||
|
========================================*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
========================================
|
||||||
|
The Following CURLOPT_* supports the "file //" notation.
|
||||||
|
COOKIEFILE
|
||||||
|
COOKIEJAR
|
||||||
|
RANDOM_FILE
|
||||||
|
EGDSOCKET
|
||||||
|
SSLKEY
|
||||||
|
CAPATH
|
||||||
|
NETRC_FILE
|
||||||
|
SSH_PUBLIC_KEYFILE
|
||||||
|
SSH_PRIVATE_KEYFILE
|
||||||
|
_CRLFILE
|
||||||
|
ISSUERCERT
|
||||||
|
SSH_KNOWNHOSTS
|
||||||
|
|
||||||
|
========================================*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
========================================
|
||||||
|
The Following CURLINFO_* NOT support
|
||||||
|
CURLINFO_SLIST
|
||||||
|
|
||||||
|
========================================*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
========================================
|
||||||
|
The Following CURLFORM_* NOT support
|
||||||
|
CURLFORM_PTRNAME
|
||||||
|
CURLFORM_PTRCONTENTS
|
||||||
|
CURLFORM_ARRAY
|
||||||
|
CURLFORM_BUFFER
|
||||||
|
CURLFORM_BUFFERPTR
|
||||||
|
CURLFORM_BUFFERLENGTH
|
||||||
|
CURLFORM_STREAM
|
||||||
|
|
||||||
|
========================================*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************************************/
|
||||||
|
/******************************************** OPTIONS ********************************************/
|
||||||
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Send & Receive Action
|
||||||
|
* Using on CURL_OnSend, CURL_OnReceive
|
||||||
|
* SendRecv_Act_GOTO_SEND = go to send
|
||||||
|
* SendRecv_Act_GOTO_RECV = go to receive
|
||||||
|
* SendRecv_Act_GOTO_WAIT = go to wait
|
||||||
|
* SendRecv_Act_GOTO_END = end the connection
|
||||||
|
* SendRecv_Act_GOTO_SEND_NO_WAIT = go to send but no select
|
||||||
|
* SendRecv_Act_GOTO_RECV_NO_WAIT = go to receive but no select
|
||||||
|
* To see how it work? see curl_echo_test.sp & curl_rcon_test.sp examples
|
||||||
|
*/
|
||||||
|
enum SendRecv_Act {
|
||||||
|
SendRecv_Act_NOTHING = 0,
|
||||||
|
|
||||||
|
SendRecv_Act_GOTO_SEND,
|
||||||
|
SendRecv_Act_GOTO_RECV,
|
||||||
|
SendRecv_Act_GOTO_WAIT,
|
||||||
|
SendRecv_Act_GOTO_END,
|
||||||
|
SendRecv_Act_GOTO_SEND_NO_WAIT,
|
||||||
|
SendRecv_Act_GOTO_RECV_NO_WAIT,
|
||||||
|
|
||||||
|
SendRecv_Act_LAST,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash type for curl_hash_file, curl_hash_string
|
||||||
|
*/
|
||||||
|
enum Openssl_Hash {
|
||||||
|
Openssl_Hash_MD5 = 0,
|
||||||
|
Openssl_Hash_MD4,
|
||||||
|
Openssl_Hash_MD2,
|
||||||
|
Openssl_Hash_SHA,
|
||||||
|
Openssl_Hash_SHA1,
|
||||||
|
Openssl_Hash_SHA224,
|
||||||
|
Openssl_Hash_SHA256,
|
||||||
|
Openssl_Hash_SHA384,
|
||||||
|
Openssl_Hash_SHA512,
|
||||||
|
Openssl_Hash_RIPEMD160,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************************************/
|
||||||
|
/******************************************* CALLBACKS *******************************************/
|
||||||
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called if curl_easy_perform_thread() or curl_easy_send_recv() Complete
|
||||||
|
* @ param Handle hndl The curl handle
|
||||||
|
* @ param CURLcode code The CURLcode code, see cURL_header.inc
|
||||||
|
* @ param any data Data passed to curl_easy_perform_thread()
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
typeset CURL_OnComplete
|
||||||
|
{
|
||||||
|
function void (Handle hndl, CURLcode code);
|
||||||
|
function void (Handle hndl, CURLcode code , any data);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called if curl_easy_send_recv() before sending data
|
||||||
|
* @ param Handle hndl The curl handle
|
||||||
|
* @ param CURLcode code The last CURLcode code, see cURL_header.inc
|
||||||
|
* @ param cell_t last_sent_dataSize The last sent datasize
|
||||||
|
* @ param any data Data passed to curl_easy_send_recv()
|
||||||
|
* @ return SendRecv_Act
|
||||||
|
*/
|
||||||
|
typeset CURL_OnSend
|
||||||
|
{
|
||||||
|
function SendRecv_Act (Handle hndl, CURLcode code, const int last_sent_dataSize);
|
||||||
|
function SendRecv_Act (Handle hndl, CURLcode code, const int last_sent_dataSize, any data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called if curl_easy_send_recv() after received data
|
||||||
|
* @ param Handle hndl The curl handle
|
||||||
|
* @ param CURLcode code The CURLcode code, see cURL_header.inc
|
||||||
|
* @ param String dataSize The received datasize
|
||||||
|
* @ param any data Data passed to curl_easy_send_recv()
|
||||||
|
* @ return SendRecv_Act
|
||||||
|
*/
|
||||||
|
typeset CURL_OnReceive
|
||||||
|
{
|
||||||
|
function SendRecv_Act (Handle hndl, CURLcode code, const char[] receiveData, const int dataSize);
|
||||||
|
function SendRecv_Act (Handle hndl, CURLcode code, const char[] receiveData, const int dataSize, any data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called if Openssl_Hash_file() after hashed the file
|
||||||
|
* @ param bool success True on success, false if hash file fail
|
||||||
|
* @ param String buffer The hash string
|
||||||
|
* @ param any data Data passed to Openssl_Hash_file()
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
typeset Openssl_Hash_Complete
|
||||||
|
{
|
||||||
|
function void (const bool success, const char[] buffer);
|
||||||
|
function void (const bool success, const char[] buffer, any data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
typeset CURL_Function_CB
|
||||||
|
{
|
||||||
|
// CURLOPT_WRITEFUNCTION
|
||||||
|
function void (Handle hndl, const char[] buffer, const int bytes, const int nmemb);
|
||||||
|
function void (Handle hndl, const char[] buffer, const int bytes, const int nmemb, any data);
|
||||||
|
|
||||||
|
// CURLOPT_READFUNCTION
|
||||||
|
function void (Handle hndl, const int bytes, const int nmemb);
|
||||||
|
function void (Handle hndl, const int bytes, const int nmemb, any data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************************************/
|
||||||
|
/******************************************** NATIVES ********************************************/
|
||||||
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a curl handle
|
||||||
|
* @ return Handle The curl handle. Returns INVALID_HANDLE on failure
|
||||||
|
*/
|
||||||
|
native Handle curl_easy_init();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a curl option for CURLOPTTYPE_OBJECTPOINT type
|
||||||
|
*
|
||||||
|
* @ param Handle hndl The handle of the curl to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @ param CURLoption opt The option to add (see enum CURLoption for details).
|
||||||
|
* @ param String buffer The value to set the option to.
|
||||||
|
* @ return bool 1 on success. 0 = The option not accept string or unsupport.
|
||||||
|
*/
|
||||||
|
native bool curl_easy_setopt_string(Handle hndl, CURLoption opt, const char[] buffer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a curl option for CURLOPTTYPE_LONG type
|
||||||
|
*
|
||||||
|
* @ param Handle hndl The handle of the curl to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @ param CURLoption opt The option to add (see enum CURLoption for details).
|
||||||
|
* @ param cell_t value The value to set the option to.
|
||||||
|
* @ return bool 1 on success. 0 = The option not accept integer or unsupport.
|
||||||
|
*/
|
||||||
|
native bool curl_easy_setopt_int(Handle hndl, CURLoption opt, int value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a curl option for CURLOPTTYPE_LONG type
|
||||||
|
* @ example"
|
||||||
|
new opt[][2] = {
|
||||||
|
{_ CURLOPT_NOPROGRESS,1},
|
||||||
|
{_ CURLOPT_VERBOSE,0}
|
||||||
|
};
|
||||||
|
*
|
||||||
|
* @ param Handle hndl The handle of the curl to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @ param cell_t array The option array to add (see enum CURLoption for details).
|
||||||
|
* @ param cell_t array_size The array size.
|
||||||
|
* @ return bool 1 on success. 0 = The option not accept integer or unsupport.
|
||||||
|
*/
|
||||||
|
native bool curl_easy_setopt_int_array(Handle hndl, int[][] array, int array_size); // int array[][2]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a curl option for CURLOPTTYPE_OFF_T type
|
||||||
|
*
|
||||||
|
* @ param Handle hndl The handle of the curl to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @ param CURLoption opt The option to add (see enum CURLoption for details).
|
||||||
|
* @ param String buffer The value to set the option to.
|
||||||
|
* @ return bool 1 on success. 0 = The option not accept string or unsupport.
|
||||||
|
*/
|
||||||
|
native bool curl_easy_setopt_int64(Handle hndl, CURLoption opt, const char buffer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a curl option for CURLOPTTYPE_OBJECTPOINT type
|
||||||
|
* @ note only accept the following handle type
|
||||||
|
curl_OpenFile()
|
||||||
|
curl_httppost()
|
||||||
|
curl_slist()
|
||||||
|
*
|
||||||
|
* @ param Handle hndl The handle of the curl to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @ param CURLoption opt The option to add (see enum CURLoption for details).
|
||||||
|
* @ param Handle other_hndl The other handle to set the option to.
|
||||||
|
* @ return bool 1 on success. 0 = The option not accept string or unsupport.
|
||||||
|
*/
|
||||||
|
native bool curl_easy_setopt_handle(Handle hndl, CURLoption opt, Handle other_hndl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a curl option for CURLOPTTYPE_FUNCTIONPOINT type
|
||||||
|
*
|
||||||
|
* @ param Handle hndl The handle of the curl to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @ param CURLoption opt The option to add (see enum CURLoption for details).
|
||||||
|
* @ param CURL_Function_CB callback The value to set the option to.
|
||||||
|
* @ param cell_t value Value to set.
|
||||||
|
* @ return bool 1 on success. 0 = The option unsupport or invalid callback function.
|
||||||
|
*/
|
||||||
|
native bool curl_easy_setopt_function(Handle hndl, CURLoption opt, CURL_Function_CB callback, any value=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load all CURLoption to curl Handle
|
||||||
|
* @ note
|
||||||
|
* Using curl_easy_perform_thread() will load option in thread
|
||||||
|
* Use this on curl_easy_perform or check all CURLoption are valid or not
|
||||||
|
* Only can use one time for each curl handle
|
||||||
|
* @ return The CURLcode code, see cURL_header.inc
|
||||||
|
*/
|
||||||
|
native CURLcode curl_load_opt(Handle hndl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a file transfer
|
||||||
|
* @ return The CURLcode code, see cURL_header.inc
|
||||||
|
*/
|
||||||
|
native CURLcode curl_easy_perform(Handle hndl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a file transfer, using thread
|
||||||
|
* @ param Handle hndl The handle of the curl to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @ param CURL_OnComplete perform_callback The complete callback.
|
||||||
|
* @ param cell_t value Value to set.
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_easy_perform_thread(Handle hndl, CURL_OnComplete perform_callback, any value=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a send & receive function for a connected curl handle
|
||||||
|
* @ param Handle hndl The handle of the curl to be used.
|
||||||
|
* @ param CURL_OnSend send_callback The send callback.
|
||||||
|
* @ param CURL_OnReceive receive_callback The receive callback.
|
||||||
|
* @ param CURL_OnComplete complete_callback The complete callback.
|
||||||
|
* @ param SendRecv_Act act The first SendRecv_Act action
|
||||||
|
* @ param cell_t send_timeout Send timeout value in milliseconds.
|
||||||
|
* @ param cell_t recv_timeout Receive timeout value in milliseconds.
|
||||||
|
* @ param cenn_t recv_buffer_Size Receive buffer size.
|
||||||
|
* @ param cell_t value Value to set.
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_easy_send_recv(Handle hndl, CURL_OnSend send_callback, CURL_OnReceive receive_callback, CURL_OnComplete complete_callback, SendRecv_Act act, int send_timeout, int recv_timeout, int recv_buffer_Size = 1024, any value=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a signal to a send & receive curl handle
|
||||||
|
* @ param Handle hndl The handle of the send & receive curl to be used.
|
||||||
|
* @ param SendRecv_Act act The SendRecv_Act action after the singal
|
||||||
|
* @ return bool 1 on success. 0 = not a curl_easy_send_recv() curl, or not running/waiting
|
||||||
|
*/
|
||||||
|
native bool curl_send_recv_Signal(Handle hndl, SendRecv_Act act);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check send & receive curl handle is Waiting or not
|
||||||
|
* @ param Handle hndl The handle of the send & receive curl to be used.
|
||||||
|
* @ return bool 1 = is waiting. 0 = not a curl_easy_send_recv() curl, or not running/waiting
|
||||||
|
*/
|
||||||
|
native bool curl_send_recv_IsWaiting(Handle hndl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the send buffer for send & receive curl handle
|
||||||
|
* @ param Handle hndl The handle of the send & receive curl to be used.
|
||||||
|
* @ param cell_t data The data to send
|
||||||
|
* @ param cell_t size if specified the \0 terminator will not be included
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_set_send_buffer(Handle hndl, const char[] data, int size=-1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send the receive data size for send & receive curl handle
|
||||||
|
* @ param Handle hndl The handle of the send & receive curl to be used.
|
||||||
|
* @ param cell_t size The receive size
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_set_receive_size(Handle hndl, int size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set send timeout for curl_easy_send_recv()
|
||||||
|
* @ param Handle hndl The handle of the send & receive curl to be used.
|
||||||
|
* @ param cell_t timeout How long will try to send data before it timeout (milliseconds).
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_set_send_timeout(Handle hndl, int timeout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set receive timeout for curl_easy_send_recv()
|
||||||
|
* @ param Handle hndl The handle of the send & receive curl to be used.
|
||||||
|
* @ param cell_t timeout How long will try to receive data before it timeout (milliseconds).
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_set_recv_timeout(Handle hndl, int timeout);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get CURLOPT_ERRORBUFFER error string in curl handle
|
||||||
|
* @ param Handle hndl The handle of the curl to be used.
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_get_error_buffer(Handle hndl, char[] buffer, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract information from a curl handle. (CURLINFO_STRING only)
|
||||||
|
* @ param Handle hndl The handle of the curl to be used.
|
||||||
|
* @ param CURLINFO info The enum CURLINFO, see cURL_header.inc
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ return The CURLcode code, see cURL_header.inc
|
||||||
|
*/
|
||||||
|
native CURLcode curl_easy_getinfo_string(Handle hndl, CURLINFO info, char[] buffer, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract information from a curl handle. (CURLINFO_LONG, CURLINFO_DOUBLE only)
|
||||||
|
* @ param Handle hndl The handle of the curl to be used.
|
||||||
|
* @ param CURLINFO info The enum CURLINFO, see cURL_header.inc
|
||||||
|
* @ param value Variable to store the value.
|
||||||
|
* @ return The CURLcode code, see cURL_header.inc
|
||||||
|
*/
|
||||||
|
native CURLcode curl_easy_getinfo_int(Handle hndl, CURLINFO info, any &value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL encodes the given string
|
||||||
|
* @ param Handle hndl The handle of the curl to be used.
|
||||||
|
* @ param String url The string to encodes.
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ return 1 on success.
|
||||||
|
*/
|
||||||
|
native bool curl_easy_escape(Handle hndl, const char[] url, char[] buffer, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL decodes the given string
|
||||||
|
* @ param Handle hndl The handle of the curl to be used.
|
||||||
|
* @ param String url The string to dencodes.
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ return The output length.
|
||||||
|
*/
|
||||||
|
native int curl_easy_unescape(Handle hndl, const char[] url, char[] buffer, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return string describing error code
|
||||||
|
* @ param CURLcode code The CURLcode code, see cURL_header.inc
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_easy_strerror(CURLcode code, char[] buffer, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the libcurl version string
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_version(char[] buffer, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the libcurl supported protocols string
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_protocols(char[] buffer, int maxlen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the libcurl supported features
|
||||||
|
* @ return The currently features bits. see CURL_VERSION_*
|
||||||
|
*/
|
||||||
|
native int curl_features();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This funcitopn same as Sourcemod OpenFile()
|
||||||
|
* For the following CUROPT_* only
|
||||||
|
* CURLOPT_WRITEDATA
|
||||||
|
* CURLOPT_HEADERDATA
|
||||||
|
* CURLOPT_READDATA
|
||||||
|
* CURLOPT_STDERR
|
||||||
|
* CURLOPT_INTERLEAVEDATA
|
||||||
|
*
|
||||||
|
* @ note
|
||||||
|
* Should not share to another threaded curl handle.
|
||||||
|
*
|
||||||
|
* @ param file File to open.
|
||||||
|
* @ param mode Open mode.
|
||||||
|
* @ return A Handle to the file, INVALID_HANDLE on open error.
|
||||||
|
*/
|
||||||
|
native Handle curl_OpenFile(const char[] file, const char[] mode);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a curl_httppost struct
|
||||||
|
* For the following CUROPT_* only
|
||||||
|
* CURLOPT_HTTPPOST
|
||||||
|
* @ note
|
||||||
|
* Should not share to another threaded curl handle.
|
||||||
|
*
|
||||||
|
* @ return A Handle to the curl_httppost, INVALID_HANDLE on error.
|
||||||
|
*/
|
||||||
|
native Handle curl_httppost();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a section to a multipart/formdata HTTP POST
|
||||||
|
* @ note
|
||||||
|
* Check enum CURLformoption (cURL_head.inc) to see which option supported
|
||||||
|
*
|
||||||
|
* @ param Handle hndl The handle of the curl_httppost to be used.
|
||||||
|
* @ param ... Variable number of format parameters.
|
||||||
|
* @ return The CURLFORMcode code, see cURL_header.inc
|
||||||
|
*/
|
||||||
|
native CURLFORMcode curl_formadd(Handle handl, any ...);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a curl_slist struct
|
||||||
|
* For the following CUROPT_* only
|
||||||
|
* CURLOPT_QUOTE
|
||||||
|
* CURLOPT_HTTPHEADER
|
||||||
|
* CURLOPT_POSTQUOTE
|
||||||
|
* CURLOPT_TELNETOPTIONS
|
||||||
|
* CURLOPT_PREQUOTE
|
||||||
|
* CURLOPT_HTTP200ALIASES
|
||||||
|
* CURLOPT_MAIL_RCPT
|
||||||
|
* CURLOPT_RESOLVE
|
||||||
|
*
|
||||||
|
* @ note
|
||||||
|
* Should not share to another threaded curl handle.
|
||||||
|
*
|
||||||
|
* @ return A Handle to the curl_slist, INVALID_HANDLE on error.
|
||||||
|
*/
|
||||||
|
native Handle curl_slist();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a string to an slist
|
||||||
|
* @ param Handle hndl The handle of the curl_slist to be used.
|
||||||
|
* @ param String buffer The string to add
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_slist_append(Handle hndl, const char[] buffer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash a file
|
||||||
|
* @ parma String file The file path. supports the "file //" notation.
|
||||||
|
* @ param Openssl_Hash algorithm Hash Algorithm.
|
||||||
|
* @ param Openssl_Hash_Complete complete_callback The complete callback.
|
||||||
|
* @ param cell_t value Value to set.
|
||||||
|
* @ noreturn
|
||||||
|
*/
|
||||||
|
native void curl_hash_file(const char[] file, Openssl_Hash algorithm, Openssl_Hash_Complete complete_callback, any value=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash a string
|
||||||
|
* @ parma String input The string to hash.
|
||||||
|
* @ param cell_t dataSize The input string size.
|
||||||
|
* @ param Openssl_Hash algorithm Hash Algorithm.
|
||||||
|
* @ param String buffer Destination string buffer to copy to.
|
||||||
|
* @ param cell_t maxlen Destination buffer length (includes null terminator).
|
||||||
|
* @ return 1 on success
|
||||||
|
*/
|
||||||
|
native bool curl_hash_string(const char[] input, int dataSize, Openssl_Hash algorithm, char[] buffer, int maxlength);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do not edit below this line!
|
||||||
|
*/
|
||||||
|
public Extension __ext_curl = {
|
||||||
|
name = "curl",
|
||||||
|
file = "curl.ext",
|
||||||
|
#if defined AUTOLOAD_EXTENSIONS
|
||||||
|
autoload = 1,
|
||||||
|
#else
|
||||||
|
autoload = 0,
|
||||||
|
#endif
|
||||||
|
#if defined REQUIRE_EXTENSIONS
|
||||||
|
required = 1,
|
||||||
|
#else
|
||||||
|
required = 0,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,668 @@
|
|||||||
|
// socket extension include file
|
||||||
|
|
||||||
|
#if defined _socket_included
|
||||||
|
#endinput
|
||||||
|
#endif
|
||||||
|
#define _socket_included
|
||||||
|
#include <core>
|
||||||
|
|
||||||
|
enum SocketType {
|
||||||
|
SOCKET_TCP = 1,
|
||||||
|
SOCKET_UDP,
|
||||||
|
SOCKET_RAW
|
||||||
|
}
|
||||||
|
|
||||||
|
enum {
|
||||||
|
EMPTY_HOST = 1,
|
||||||
|
NO_HOST,
|
||||||
|
CONNECT_ERROR,
|
||||||
|
SEND_ERROR,
|
||||||
|
BIND_ERROR,
|
||||||
|
RECV_ERROR,
|
||||||
|
LISTEN_ERROR
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************************************/
|
||||||
|
/******************************************** options ********************************************/
|
||||||
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Options available for SocketSetOption()
|
||||||
|
*
|
||||||
|
* @note modifying these options is not required for normal operation, you can skip the whole
|
||||||
|
* section in most cases.
|
||||||
|
*/
|
||||||
|
enum SocketOption {
|
||||||
|
/**
|
||||||
|
* If this option is set the socket extension will try to concatenate SocketReceive callbacks.
|
||||||
|
*
|
||||||
|
* This will possibly lower the amount of callbacks passed to SourceMod plugins and improve the
|
||||||
|
* performance. The socket extension will preserve the packet order.
|
||||||
|
*
|
||||||
|
* @note this doesn't prevent multiple callbacks, it only reduces them for high load.
|
||||||
|
* @note this will not truncate packets below 4096 bytes, setting it lower will be ignored
|
||||||
|
* @note set this option if you expect lots of data in a short timeframe
|
||||||
|
* @note don't forget to set your buffer sizes at least to the value passed to this function, but
|
||||||
|
* always at least to 4096
|
||||||
|
*
|
||||||
|
* @param int 0(=default) to disable or max. chunk size including \0 terminator in bytes
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
ConcatenateCallbacks = 1,
|
||||||
|
/**
|
||||||
|
* If this option is set the socket extension will enforce a mutex lock in the GameFrame() hook.
|
||||||
|
*
|
||||||
|
* This will ensure that callbacks will be processed every gameframe as fast as possible with the
|
||||||
|
* drawback of potentially creating lag. It's not recommended to set this option for most cases.
|
||||||
|
* If this option is not set the gameframe will be skipped if quietly obtaining a lock fails.
|
||||||
|
*
|
||||||
|
* @note combine this with CallbacksPerFrame for best performance
|
||||||
|
* @note this option will affect all sockets from all plugins, use it with caution!
|
||||||
|
*
|
||||||
|
* @param bool whether to force locking or not
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
ForceFrameLock,
|
||||||
|
/**
|
||||||
|
* This will specify the maximum amount of callbacks processed in every gameframe.
|
||||||
|
*
|
||||||
|
* The default value for this option is 1, setting it higher will possibly increase networking
|
||||||
|
* performance but may cause lag if it's set too high.
|
||||||
|
* The amount of callbacks actually being processed is limited by not being able to quietly obtain
|
||||||
|
* a lock (see ForceFrameLock) and the amount of callbacks in the queue.
|
||||||
|
*
|
||||||
|
* @note this option will affect all sockets from all plugins, use it with caution!
|
||||||
|
*
|
||||||
|
* @param int maximum amount of callbacks per gameframe
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
CallbacksPerFrame,
|
||||||
|
/**
|
||||||
|
* If this option is set the socket will be allowed to send broadcast messages in case the protocol
|
||||||
|
* supports it. This is a wrapper for setting SO_BROADCAST.
|
||||||
|
*
|
||||||
|
* @param bool whether to allow broadcasting or not
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketBroadcast,
|
||||||
|
/**
|
||||||
|
* If this option is set SocketBind() will allow reusing local adresses in case the protocol
|
||||||
|
* supports it. This is a wrapper for setting SO_REUSEADDR.
|
||||||
|
*
|
||||||
|
* @param bool whether to allow broadcasting or not
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketReuseAddr,
|
||||||
|
/**
|
||||||
|
* If this option is set the socket will try to keep the connection alive by periodically sending
|
||||||
|
* messages if the protocol supports it. This is a wrapper for setting SO_KEEPALIVE.
|
||||||
|
*
|
||||||
|
* @param bool whether to allow broadcasting or not
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketKeepAlive,
|
||||||
|
/**
|
||||||
|
* This option specifies how long a socket will wait if it's being closed and its send buffer is
|
||||||
|
* still filled. This is a wrapper for setting SO_LINGER.
|
||||||
|
*
|
||||||
|
* @param int 0 (=default) to disable or time in s
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketLinger,
|
||||||
|
/**
|
||||||
|
* If this option is set out-of-band data will be inlined into the normal receive stream. This is a
|
||||||
|
* wrapper for setting SO_OOBINLINE.
|
||||||
|
*
|
||||||
|
* @param bool whether to inline out-of-band data or not
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketOOBInline,
|
||||||
|
/**
|
||||||
|
* This option specifies how large the send buffer will be. This is a wrapper for setting
|
||||||
|
* SO_SNDBUF.
|
||||||
|
*
|
||||||
|
* @param int size in bytes
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketSendBuffer,
|
||||||
|
/**
|
||||||
|
* This option specifies how large the receive buffer will be. This is a wrapper for setting
|
||||||
|
* SO_RCVBUF.
|
||||||
|
*
|
||||||
|
* @param int size in bytes
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketReceiveBuffer,
|
||||||
|
/**
|
||||||
|
* If this option is set outgoing messages will ignore the default routing facilities if the
|
||||||
|
* protocol implementation supports it. The remote site should be directly connected to the sender.
|
||||||
|
* This is a wrapper for setting SO_DONTROUTE.
|
||||||
|
*
|
||||||
|
* @param bool whether to skip default routing or not
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketDontRoute,
|
||||||
|
/**
|
||||||
|
* This option specifies the minimum amount of data to receive before processing it. This is a
|
||||||
|
* wrapper for setting SO_RCVLOWAT.
|
||||||
|
*
|
||||||
|
* @note this can probably block the extension, use it with caution!
|
||||||
|
*
|
||||||
|
* @param int size in bytes
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketReceiveLowWatermark,
|
||||||
|
/**
|
||||||
|
* This option specifies how long a socket will try to receive data before it times out and
|
||||||
|
* processes the data. This is a wrapper for setting SO_RCVTIMEO.
|
||||||
|
*
|
||||||
|
* @param int 0 (=default) to disable or time in ms
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketReceiveTimeout,
|
||||||
|
/**
|
||||||
|
* This option specifies the minimum amount of data required in the send buffer before starting to
|
||||||
|
* send it. This is a wrapper for setting SO_SNDLOWAT.
|
||||||
|
*
|
||||||
|
* @note this can probably block the extension, use it with caution!
|
||||||
|
*
|
||||||
|
* @param int size in bytes
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketSendLowWatermark,
|
||||||
|
/**
|
||||||
|
* This option specifies how long a socket will try to send data before it times out and
|
||||||
|
* retries it later. This is a wrapper for setting SO_SNDTIMEO.
|
||||||
|
*
|
||||||
|
* @param int 0 (=default) to disable or time in ms
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
SocketSendTimeout,
|
||||||
|
/**
|
||||||
|
* If this option is set the socket extension will display debugging messages in the server console/logs.
|
||||||
|
*
|
||||||
|
* @param bool whether to enable debugging or not
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
DebugMode
|
||||||
|
}
|
||||||
|
|
||||||
|
// Methodmap
|
||||||
|
methodmap Socket < Handle {
|
||||||
|
/**
|
||||||
|
* Creates a new socket.
|
||||||
|
*
|
||||||
|
* @note this function may be relatively expensive, reuse sockets if possible
|
||||||
|
*
|
||||||
|
* @param SocketType protocol The protocol to use, SOCKET_TCP is default
|
||||||
|
* @param SocketErrorCB efunc The error callback
|
||||||
|
* @return Handle The socket handle. Returns INVALID_HANDLE on failure
|
||||||
|
*/
|
||||||
|
public native Socket(SocketType protocol=SOCKET_TCP, SocketErrorCB efunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds the socket to a local address
|
||||||
|
*
|
||||||
|
* @param String hostname The hostname (or IP) to bind the socket to.
|
||||||
|
* @param int port The port to bind the socket to.
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
public native bool Bind(const char[] hostname, int port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects a socket
|
||||||
|
*
|
||||||
|
* @note this native is threaded, it may be still running after it executed, use the connect callback
|
||||||
|
* @note invokes the SocketError callback with errorType = CONNECT_ERROR or EMPTY_HOST if it fails
|
||||||
|
* @note invokes the SocketConnect callback if it succeeds
|
||||||
|
*
|
||||||
|
* @param SocketConnectCB cfunc The connect callback
|
||||||
|
* @param SocketReceiveCB rfunc The receive callback
|
||||||
|
* @param SocketDisconnectCB dfunc The disconnect callback
|
||||||
|
* @param String hostname The hostname (or IP) to connect to.
|
||||||
|
* @param int port The port to connect to.
|
||||||
|
*/
|
||||||
|
public native void Connect(SocketConnectCB cfunc, SocketReceiveCB rfunc, SocketDisconnectCB dfunc, const char[] hostname, int port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects a socket
|
||||||
|
*
|
||||||
|
* @note this will not close the handle, the socket will be reset to a state similar to after SocketCreate()
|
||||||
|
* @note this won't trigger any disconnect/error callbacks
|
||||||
|
*
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
public native bool Disconnect();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes a socket listen for incoming connections
|
||||||
|
*
|
||||||
|
* @param SocketIncomingCB ifunc The callback for incoming connections
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
public native bool Listen(SocketIncomingCB ifunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends data through the socket.
|
||||||
|
*
|
||||||
|
* @note specify size for binary safe operation
|
||||||
|
* @note if size is not specified the \0 terminator will not be included
|
||||||
|
* @note This native is threaded, it may be still running after it executed (not atomic).
|
||||||
|
* @note Use the SendqueueEmpty callback to determine when all data has been successfully sent.
|
||||||
|
* @note The socket extension will ensure that the data will be send in the correct order and split
|
||||||
|
* the data if required.
|
||||||
|
*
|
||||||
|
* @param String data The data to send.
|
||||||
|
*/
|
||||||
|
public native void Send(const char[] data, int size = -1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends UDP data through the socket to a specific destination.
|
||||||
|
*
|
||||||
|
* @note specify size for binary safe operation
|
||||||
|
* @note if size is not specified the \0 terminator will not be included
|
||||||
|
* @note This native is threaded, it may be still running after it executed (not atomic).
|
||||||
|
* @note Use the SendqueueEmpty callback to determine when all data has been successfully sent.
|
||||||
|
* @note The socket extension will ensure that the data will be send in the correct order and split
|
||||||
|
* the data if required.
|
||||||
|
*
|
||||||
|
* @param String data The data to send.
|
||||||
|
* @param String hostname The hostname (or IP) to send to.
|
||||||
|
* @param int port The port to send to.
|
||||||
|
*/
|
||||||
|
public native void SendTo(const char[] data, int size = -1, const char[] hostname, int port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a socket option.
|
||||||
|
*
|
||||||
|
* @param SocketOption option The option to modify (see enum SocketOption for details).
|
||||||
|
* @param int value The value to set the option to.
|
||||||
|
* @return int 1 on success.
|
||||||
|
*/
|
||||||
|
public native int SetOption(SocketOption option, int value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket receives data
|
||||||
|
*
|
||||||
|
* @note this is only useful and required for child-sockets spawned by listen-sockets
|
||||||
|
* (otherwise you already set it in SocketConnect())
|
||||||
|
*
|
||||||
|
* @param SocketReceiveCB rfunc The receive callback
|
||||||
|
*/
|
||||||
|
public native void SetReceiveCallback(SocketReceiveCB rfunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket sent all items in its send queue
|
||||||
|
*
|
||||||
|
* @note this must be called AFTER sending (queueing) the data
|
||||||
|
* @note if no send-data is queued this will fire the callback itself
|
||||||
|
* @note the callback is guaranteed to fire
|
||||||
|
*
|
||||||
|
* @param SocketDisconnectCB dfunc The disconnect callback
|
||||||
|
*/
|
||||||
|
public native void SetSendqueueEmptyCallback(SocketSendqueueEmptyCB sfunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket was properly disconnected by the remote side
|
||||||
|
*
|
||||||
|
* @note this is only useful and required for child-sockets spawned by listen-sockets
|
||||||
|
* (otherwise you already set it in SocketConnect())
|
||||||
|
*
|
||||||
|
* @param SocketDisconnectCB dfunc The disconnect callback
|
||||||
|
*/
|
||||||
|
public native void SetDisconnectCallback(SocketDisconnectCB dfunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket triggered an error
|
||||||
|
*
|
||||||
|
* @note this is only useful and required for child-sockets spawned by listen-sockets
|
||||||
|
* (otherwise you already set it in SocketCreate())
|
||||||
|
*
|
||||||
|
* @param SocketErrorCB efunc The error callback
|
||||||
|
*/
|
||||||
|
public native void SetErrorCallback(SocketErrorCB efunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the argument being passed to callbacks
|
||||||
|
*
|
||||||
|
* @param any arg The argument to set
|
||||||
|
*/
|
||||||
|
public native void SetArg(any arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the local system's hostname as the command "hostname" does.
|
||||||
|
*
|
||||||
|
* @param dest Destination string buffer to copy to.
|
||||||
|
* @param destLen Destination buffer length (includes null terminator).
|
||||||
|
*
|
||||||
|
* @return 1 on success
|
||||||
|
*/
|
||||||
|
public static native int GetHostName(char[] dest, int destLen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether a socket is connected or not.
|
||||||
|
*
|
||||||
|
* @return bool The connection status
|
||||||
|
*/
|
||||||
|
property bool Connected {
|
||||||
|
public native get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************************************************/
|
||||||
|
/******************************************* callbacks *******************************************/
|
||||||
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* triggered if a normal sockets finished connecting and is ready to be used
|
||||||
|
*
|
||||||
|
* @param socket The socket handle pointing to the calling socket
|
||||||
|
* @param arg The argument set by SocketSetArg()
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
typedef SocketConnectCB = function void (Socket socket, any arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* triggered if a listening socket received an incoming connection and is ready to be used
|
||||||
|
*
|
||||||
|
* @note The child-socket won't work until receive-, disconnect-, and errorcallback for it are set.
|
||||||
|
*
|
||||||
|
* @param Socket socket The socket handle pointing to the calling listen-socket
|
||||||
|
* @param Socket newSocket The socket handle to the newly spawned child socket
|
||||||
|
* @param String remoteIP The remote IP
|
||||||
|
* @param any arg The argument set by SocketSetArg() for the listen-socket
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
typedef SocketIncomingCB = function void (Socket socket, Socket newSocket, const char[] remoteIP, int remotePort, any arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* triggered if a socket receives data
|
||||||
|
*
|
||||||
|
* @note This is binary safe if you always use dataSize for operations on receiveData[]
|
||||||
|
* @note packets may be split up into multiple chunks -> multiple calls to the receive callback
|
||||||
|
* @note if not set otherwise by SocketSetOption(..., ConcatenateCallbacks, ...) receiveData will
|
||||||
|
* never be longer than 4096 characters including \0 terminator
|
||||||
|
*
|
||||||
|
* @param Socket socket The socket handle pointing to the calling socket
|
||||||
|
* @param String receiveData The data which arrived, 0-terminated at receiveData[dataSize]
|
||||||
|
* @param int dataSize The length of the arrived data excluding the 0-termination
|
||||||
|
* @param any arg The argument set by SocketSetArg() for the socket
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
typedef SocketReceiveCB = function void (Socket socket, const char[] receiveData, const int dataSize, any arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called after a socket sent all items in its send queue successfully
|
||||||
|
*
|
||||||
|
* @param Socket socket The socket handle pointing to the calling socket
|
||||||
|
* @param any arg The argument set by SocketSetArg() for the socket
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
typedef SocketSendqueueEmptyCB = function void (Socket socket, any arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called if a socket has been properly disconnected by the remote side
|
||||||
|
*
|
||||||
|
* @note You should call CloseHandle(socket) or reuse the socket before this function ends
|
||||||
|
*
|
||||||
|
* @param Socket socket The socket handle pointing to the calling socket
|
||||||
|
* @param any arg The argument set by SocketSetArg() for the socket
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
typedef SocketDisconnectCB = function void (Socket socket, any arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called if an unrecoverable error occured, close the socket without an additional call to a disconnect callback
|
||||||
|
*
|
||||||
|
* @note You should call CloseHandle(socket) or reuse the socket before this function ends
|
||||||
|
*
|
||||||
|
* @param Socket socket The socket handle pointing to the calling socket
|
||||||
|
* @param int errorType The error type, see defines above
|
||||||
|
* @param int errorNum The errno, see errno.h for details
|
||||||
|
* @param any arg The argument set by SocketSetArg() for the socket
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
typedef SocketErrorCB = function void (Socket socket, const int errorType, const int errorNum, any arg);
|
||||||
|
|
||||||
|
/*************************************************************************************************/
|
||||||
|
/******************************************** natives ********************************************/
|
||||||
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether a socket is connected or not.
|
||||||
|
*
|
||||||
|
* @param socket Socket handle to check
|
||||||
|
* @return bool The connection status
|
||||||
|
*/
|
||||||
|
native bool SocketIsConnected(Handle socket);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new socket.
|
||||||
|
*
|
||||||
|
* @note this function may be relatively expensive, reuse sockets if possible
|
||||||
|
*
|
||||||
|
* @param SocketType protocol The protocol to use, SOCKET_TCP is default
|
||||||
|
* @param SocketErrorCB efunc The error callback
|
||||||
|
* @return Socket The socket handle. Returns INVALID_HANDLE on failure
|
||||||
|
*/
|
||||||
|
native Socket SocketCreate(SocketType protocol=SOCKET_TCP, SocketErrorCB efunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds the socket to a local address
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param String hostname The hostname (or IP) to bind the socket to.
|
||||||
|
* @param int port The port to bind the socket to.
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
native bool SocketBind(Handle socket, const char[] hostname, int port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects a socket
|
||||||
|
*
|
||||||
|
* @note this native is threaded, it may be still running after it executed, use the connect callback
|
||||||
|
* @note invokes the SocketError callback with errorType = CONNECT_ERROR or EMPTY_HOST if it fails
|
||||||
|
* @note invokes the SocketConnect callback if it succeeds
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param SocketConnectCB cfunc The connect callback
|
||||||
|
* @param SocketReceiveCB rfunc The receive callback
|
||||||
|
* @param SocketDisconnectCB dfunc The disconnect callback
|
||||||
|
* @param String hostname The hostname (or IP) to connect to.
|
||||||
|
* @param int port The port to connect to.
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketConnect(Handle socket, SocketConnectCB cfunc, SocketReceiveCB rfunc, SocketDisconnectCB dfunc, const char[] hostname, int port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects a socket
|
||||||
|
*
|
||||||
|
* @note this will not close the handle, the socket will be reset to a state similar to after SocketCreate()
|
||||||
|
* @note this won't trigger any disconnect/error callbacks
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native bool SocketDisconnect(Handle socket);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes a socket listen for incoming connections
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param SocketIncomingCB ifunc The callback for incoming connections
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
native bool SocketListen(Handle socket, SocketIncomingCB ifunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends data through the socket.
|
||||||
|
*
|
||||||
|
* @note specify size for binary safe operation
|
||||||
|
* @note if size is not specified the \0 terminator will not be included
|
||||||
|
* @note This native is threaded, it may be still running after it executed (not atomic).
|
||||||
|
* @note Use the SendqueueEmpty callback to determine when all data has been successfully sent.
|
||||||
|
* @note The socket extension will ensure that the data will be send in the correct order and split
|
||||||
|
* the data if required.
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param String data The data to send.
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketSend(Handle socket, const char[] data, int size=-1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends UDP data through the socket to a specific destination.
|
||||||
|
*
|
||||||
|
* @note specify size for binary safe operation
|
||||||
|
* @note if size is not specified the \0 terminator will not be included
|
||||||
|
* @note This native is threaded, it may be still running after it executed (not atomic).
|
||||||
|
* @note Use the SendqueueEmpty callback to determine when all data has been successfully sent.
|
||||||
|
* @note The socket extension will ensure that the data will be send in the correct order and split
|
||||||
|
* the data if required.
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param String data The data to send.
|
||||||
|
* @param String hostname The hostname (or IP) to send to.
|
||||||
|
* @param int port The port to send to.
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketSendTo(Handle socket, const char[] data, int size=-1, const char[] hostname, int port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a socket option.
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used. May be INVALID_HANDLE if not essential.
|
||||||
|
* @param SocketOption option The option to modify (see enum SocketOption for details).
|
||||||
|
* @param cellt_ value The value to set the option to.
|
||||||
|
* @return int 1 on success.
|
||||||
|
*/
|
||||||
|
native int SocketSetOption(Handle socket, SocketOption option, int value);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket receives data
|
||||||
|
*
|
||||||
|
* @note this is only useful and required for child-sockets spawned by listen-sockets
|
||||||
|
* (otherwise you already set it in SocketConnect())
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param SocketReceiveCB rfunc The receive callback
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketSetReceiveCallback(Handle socket, SocketReceiveCB rfunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket sent all items in its send queue
|
||||||
|
*
|
||||||
|
* @note this must be called AFTER sending (queueing) the data
|
||||||
|
* @note if no send-data is queued this will fire the callback itself
|
||||||
|
* @note the callback is guaranteed to fire
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param SocketDisconnectCB dfunc The disconnect callback
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketSetSendqueueEmptyCallback(Handle socket, SocketSendqueueEmptyCB sfunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket was properly disconnected by the remote side
|
||||||
|
*
|
||||||
|
* @note this is only useful and required for child-sockets spawned by listen-sockets
|
||||||
|
* (otherwise you already set it in SocketConnect())
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param SocketDisconnectCB dfunc The disconnect callback
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketSetDisconnectCallback(Handle socket, SocketDisconnectCB dfunc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the callback function for when the socket triggered an error
|
||||||
|
*
|
||||||
|
* @note this is only useful and required for child-sockets spawned by listen-sockets
|
||||||
|
* (otherwise you already set it in SocketCreate())
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param SocketErrorCB efunc The error callback
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketSetErrorCallback(Handle socket, SocketErrorCB efunc);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the argument being passed to callbacks
|
||||||
|
*
|
||||||
|
* @param Handle socket The handle of the socket to be used.
|
||||||
|
* @param any arg The argument to set
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native void SocketSetArg(Handle socket, any arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the local system's hostname as the command "hostname" does.
|
||||||
|
*
|
||||||
|
* @param dest Destination string buffer to copy to.
|
||||||
|
* @param destLen Destination buffer length (includes null terminator).
|
||||||
|
*
|
||||||
|
* @return 1 on success
|
||||||
|
*/
|
||||||
|
native int SocketGetHostName(char[] dest, int destLen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _________________Do not edit below this line!_______________________
|
||||||
|
*/
|
||||||
|
public Extension __ext_socket =
|
||||||
|
{
|
||||||
|
name = "Socket",
|
||||||
|
file = "socket.ext",
|
||||||
|
#if defined AUTOLOAD_EXTENSIONS
|
||||||
|
autoload = 1,
|
||||||
|
#else
|
||||||
|
autoload = 0,
|
||||||
|
#endif
|
||||||
|
#if defined REQUIRE_EXTENSIONS
|
||||||
|
required = 1,
|
||||||
|
#else
|
||||||
|
required = 0,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#if !defined REQUIRE_EXTENSIONS
|
||||||
|
public void __ext_socket_SetNTVOptional()
|
||||||
|
{
|
||||||
|
MarkNativeAsOptional("Socket.Socket");
|
||||||
|
MarkNativeAsOptional("Socket.Bind");
|
||||||
|
MarkNativeAsOptional("Socket.Connect");
|
||||||
|
MarkNativeAsOptional("Socket.Disconnect");
|
||||||
|
MarkNativeAsOptional("Socket.Listen");
|
||||||
|
MarkNativeAsOptional("Socket.Send");
|
||||||
|
MarkNativeAsOptional("Socket.SendTo");
|
||||||
|
MarkNativeAsOptional("Socket.SetOption");
|
||||||
|
MarkNativeAsOptional("Socket.SetReceiveCallback");
|
||||||
|
MarkNativeAsOptional("Socket.SetSendqueueEmptyCallback");
|
||||||
|
MarkNativeAsOptional("Socket.SetDisconnectCallback");
|
||||||
|
MarkNativeAsOptional("Socket.SetErrorCallback");
|
||||||
|
MarkNativeAsOptional("Socket.SetArg");
|
||||||
|
MarkNativeAsOptional("Socket.GetHostName");
|
||||||
|
MarkNativeAsOptional("Socket.Connected.get");
|
||||||
|
MarkNativeAsOptional("SocketIsConnected");
|
||||||
|
MarkNativeAsOptional("SocketCreate");
|
||||||
|
MarkNativeAsOptional("SocketBind");
|
||||||
|
MarkNativeAsOptional("SocketConnect");
|
||||||
|
MarkNativeAsOptional("SocketDisconnect");
|
||||||
|
MarkNativeAsOptional("SocketListen");
|
||||||
|
MarkNativeAsOptional("SocketSend");
|
||||||
|
MarkNativeAsOptional("SocketSendTo");
|
||||||
|
MarkNativeAsOptional("SocketSetOption");
|
||||||
|
MarkNativeAsOptional("SocketSetReceiveCallback");
|
||||||
|
MarkNativeAsOptional("SocketSetSendqueueEmptyCallback");
|
||||||
|
MarkNativeAsOptional("SocketSetDisconnectCallback");
|
||||||
|
MarkNativeAsOptional("SocketSetErrorCallback");
|
||||||
|
MarkNativeAsOptional("SocketSetArg");
|
||||||
|
MarkNativeAsOptional("SocketGetHostName");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,319 @@
|
|||||||
|
#if defined _steamtools_included
|
||||||
|
#endinput
|
||||||
|
#endif
|
||||||
|
#define _steamtools_included
|
||||||
|
|
||||||
|
#define USE_CUSTOM_STEAMID -1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called after SteamTools has completely finished loading.
|
||||||
|
* No features are available before this point.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
forward Steam_FullyLoaded();
|
||||||
|
forward Steam_Shutdown();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current status of VAC on the server.
|
||||||
|
*
|
||||||
|
* @return A bool representing the current VAC status.
|
||||||
|
*/
|
||||||
|
native bool:Steam_IsVACEnabled();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the server's external IP address, as reported by Steam.
|
||||||
|
*
|
||||||
|
* @param octets Reference to an array to be filled with the octets of
|
||||||
|
* the IP address.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native Steam_GetPublicIP(octets[4]);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is fired when the Steam master servers report that your server is
|
||||||
|
* outdated
|
||||||
|
*
|
||||||
|
* @return Plugin_Continue to continue normal operation or Plugin_Handled
|
||||||
|
* to block the regular console message.
|
||||||
|
*/
|
||||||
|
forward Action:Steam_RestartRequested();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests a client's status in a Steam group.
|
||||||
|
* Response is returned in Steam_GroupStatusResult forward.
|
||||||
|
*
|
||||||
|
* @param client Client index.
|
||||||
|
* @param groupAccountID 32-bit account ID of group.
|
||||||
|
*
|
||||||
|
* @return A bool representing whether or not the request was sent to
|
||||||
|
* Steam.
|
||||||
|
*/
|
||||||
|
native bool:Steam_RequestGroupStatus(client, groupAccountID);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a response to a group status request is recieved.
|
||||||
|
* This is called for all responses recieved, not just ones requested by
|
||||||
|
* your plugin.
|
||||||
|
*
|
||||||
|
* @param client Client index.
|
||||||
|
* @param groupAccountID 32-bit account ID of group. Make sure to check
|
||||||
|
* this agaist the ID you are expecting.
|
||||||
|
* @param groupMember Whether or not the client is a member in the
|
||||||
|
* specified group.
|
||||||
|
* @param groupMember Whether or not the client is an officer in the
|
||||||
|
* specified group.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
forward Steam_GroupStatusResult(client, groupAccountID, bool:groupMember, bool:groupOfficer);
|
||||||
|
|
||||||
|
#pragma deprecated No longer operational
|
||||||
|
native Steam_RequestGameplayStats();
|
||||||
|
forward Steam_GameplayStats(rank, totalConnects, totalMinutesPlayed);
|
||||||
|
|
||||||
|
#pragma deprecated No longer operational
|
||||||
|
native Steam_RequestServerReputation();
|
||||||
|
forward Steam_Reputation(reputationScore, bool:banned, bannedIP, bannedPort, bannedGameID, banExpires);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current Steam connection state, the forwards below fire
|
||||||
|
* whenever this changes.
|
||||||
|
*
|
||||||
|
* @return Steam connection state.
|
||||||
|
*/
|
||||||
|
native bool:Steam_IsConnected();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired upon a successfull connection to Steam.
|
||||||
|
* Is also fired for late-loaded plugins.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
forward Steam_SteamServersConnected();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired upon disconnection from Steam.
|
||||||
|
* Is also fired for late-loaded plugins.
|
||||||
|
*
|
||||||
|
* For plugins loaded with the server, this will normally be fired right
|
||||||
|
* after Steam_FullyLoaded, closly followed by Steam_SteamServersConnected
|
||||||
|
* if a successfull connection is established.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
forward Steam_SteamServersDisconnected();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets an entry in the server's list of rules. This list is used to
|
||||||
|
* build the response to the A2S_RULES query and is generally known as
|
||||||
|
* the list of public convars.
|
||||||
|
*
|
||||||
|
* @param key Name of the key to set, is created if it does not already
|
||||||
|
* exist.
|
||||||
|
* @param value Value of the key to set, the named key is removed if this
|
||||||
|
* is blank.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native Steam_SetRule(const String:key[], const String:value[]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the server's list of rules. This list is used to build the
|
||||||
|
* response to the A2S_RULES query and is generally known as the list of
|
||||||
|
* public convars.
|
||||||
|
*
|
||||||
|
* @noreturn
|
||||||
|
*/
|
||||||
|
native Steam_ClearRules();
|
||||||
|
|
||||||
|
|
||||||
|
native Steam_ForceHeartbeat();
|
||||||
|
|
||||||
|
#pragma deprecated No longer operational
|
||||||
|
native bool:Steam_AddMasterServer(const String:serverAddress[]);
|
||||||
|
#pragma deprecated No longer operational
|
||||||
|
native bool:Steam_RemoveMasterServer(const String:serverAddress[]);
|
||||||
|
#pragma deprecated No longer operational
|
||||||
|
native Steam_GetNumMasterServers();
|
||||||
|
#pragma deprecated No longer operational
|
||||||
|
native Steam_GetMasterServerAddress(server, String:serverAddress[], maxlength);
|
||||||
|
|
||||||
|
native Steam_SetGameDescription(String:gameDescription[]);
|
||||||
|
|
||||||
|
native Steam_RequestStats(client);
|
||||||
|
forward Steam_StatsReceived(client);
|
||||||
|
forward Steam_StatsUnloaded(client);
|
||||||
|
native Steam_GetStat(client, const String:statName[]);
|
||||||
|
native Float:Steam_GetStatFloat(client, const String:statName[]);
|
||||||
|
native bool:Steam_IsAchieved(client, const String:achievementName[]);
|
||||||
|
|
||||||
|
|
||||||
|
native Steam_GetNumClientSubscriptions(client);
|
||||||
|
native Steam_GetClientSubscription(client, index);
|
||||||
|
|
||||||
|
native Steam_GetNumClientDLCs(client);
|
||||||
|
native Steam_GetClientDLC(client, index);
|
||||||
|
|
||||||
|
stock bool:Steam_CheckClientSubscription(client, subid)
|
||||||
|
{
|
||||||
|
new subCount = Steam_GetNumClientSubscriptions(client);
|
||||||
|
for (new x = 0; x < subCount; x++)
|
||||||
|
{
|
||||||
|
if (Steam_GetClientSubscription(client, x) == subid)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
stock bool:Steam_CheckClientDLC(client, appid)
|
||||||
|
{
|
||||||
|
new subCount = Steam_GetNumClientDLCs(client);
|
||||||
|
for (new x = 0; x < subCount; x++)
|
||||||
|
{
|
||||||
|
if (Steam_GetClientDLC(client, x) == appid)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
native Steam_GetCSteamIDForClient(client, String:steamID[], maxlength);
|
||||||
|
|
||||||
|
native bool:Steam_SetCustomSteamID(const String:renderedID[]);
|
||||||
|
native bool:Steam_GetCustomSteamID(String:renderedID[], maxlength);
|
||||||
|
|
||||||
|
native Steam_RenderedIDToCSteamID(const String:renderedID[], String:steamID[], maxlength);
|
||||||
|
native Steam_CSteamIDToRenderedID(const String:steamID[], String:renderedID[], maxlength);
|
||||||
|
|
||||||
|
native Steam_GroupIDToCSteamID(groupID, String:steamID[], maxlength);
|
||||||
|
native Steam_CSteamIDToGroupID(const String:steamID[]);
|
||||||
|
|
||||||
|
enum HTTPRequestHandle
|
||||||
|
{
|
||||||
|
INVALID_HTTP_HANDLE = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum HTTPMethod
|
||||||
|
{
|
||||||
|
HTTPMethod_Invalid = 0,
|
||||||
|
HTTPMethod_GET,
|
||||||
|
HTTPMethod_HEAD,
|
||||||
|
HTTPMethod_POST,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum HTTPStatusCode
|
||||||
|
{
|
||||||
|
HTTPStatusCode_Invalid = 0,
|
||||||
|
|
||||||
|
// Informational codes
|
||||||
|
HTTPStatusCode_Continue = 100,
|
||||||
|
HTTPStatusCode_SwitchingProtocols = 101,
|
||||||
|
|
||||||
|
// Success codes
|
||||||
|
HTTPStatusCode_OK = 200,
|
||||||
|
HTTPStatusCode_Created = 201,
|
||||||
|
HTTPStatusCode_Accepted = 202,
|
||||||
|
HTTPStatusCode_NonAuthoritative = 203,
|
||||||
|
HTTPStatusCode_NoContent = 204,
|
||||||
|
HTTPStatusCode_ResetContent = 205,
|
||||||
|
HTTPStatusCode_PartialContent = 206,
|
||||||
|
|
||||||
|
// Redirection codes
|
||||||
|
HTTPStatusCode_MultipleChoices = 300,
|
||||||
|
HTTPStatusCode_MovedPermanently = 301,
|
||||||
|
HTTPStatusCode_Found = 302,
|
||||||
|
HTTPStatusCode_SeeOther = 303,
|
||||||
|
HTTPStatusCode_NotModified = 304,
|
||||||
|
HTTPStatusCode_UseProxy = 305,
|
||||||
|
HTTPStatusCode_TemporaryRedirect = 307,
|
||||||
|
|
||||||
|
// Error codes
|
||||||
|
HTTPStatusCode_BadRequest = 400,
|
||||||
|
HTTPStatusCode_Unauthorized = 401,
|
||||||
|
HTTPStatusCode_PaymentRequired = 402,
|
||||||
|
HTTPStatusCode_Forbidden = 403,
|
||||||
|
HTTPStatusCode_NotFound = 404,
|
||||||
|
HTTPStatusCode_MethodNotAllowed = 405,
|
||||||
|
HTTPStatusCode_NotAcceptable = 406,
|
||||||
|
HTTPStatusCode_ProxyAuthRequired = 407,
|
||||||
|
HTTPStatusCode_RequestTimeout = 408,
|
||||||
|
HTTPStatusCode_Conflict = 409,
|
||||||
|
HTTPStatusCode_Gone = 410,
|
||||||
|
HTTPStatusCode_LengthRequired = 411,
|
||||||
|
HTTPStatusCode_PreconditionFailed = 412,
|
||||||
|
HTTPStatusCode_RequestEntityTooLarge = 413,
|
||||||
|
HTTPStatusCode_RequestURITooLong = 414,
|
||||||
|
HTTPStatusCode_UnsupportedMediaType = 415,
|
||||||
|
HTTPStatusCode_RequestedRangeNotSatisfiable = 416,
|
||||||
|
HTTPStatusCode_ExpectationFailed = 417,
|
||||||
|
|
||||||
|
// Server error codes
|
||||||
|
HTTPStatusCode_InternalServerError = 500,
|
||||||
|
HTTPStatusCode_NotImplemented = 501,
|
||||||
|
HTTPStatusCode_BadGateway = 502,
|
||||||
|
HTTPStatusCode_ServiceUnavailable = 503,
|
||||||
|
HTTPStatusCode_GatewayTimeout = 504,
|
||||||
|
HTTPStatusCode_HTTPVersionNotSupported = 505,
|
||||||
|
};
|
||||||
|
|
||||||
|
#if SOURCEMOD_V_MAJOR >= 1 && SOURCEMOD_V_MINOR >= 9
|
||||||
|
|
||||||
|
typeset HTTPRequestComplete
|
||||||
|
{
|
||||||
|
function void (HTTPRequestHandle HTTPRequest, bool requestSuccessful, HTTPStatusCode statusCode);
|
||||||
|
function void (HTTPRequestHandle HTTPRequest, bool requestSuccessful, HTTPStatusCode statusCode, any contextData);
|
||||||
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
funcenum HTTPRequestComplete
|
||||||
|
{
|
||||||
|
public(HTTPRequestHandle:HTTPRequest, bool:requestSuccessful, HTTPStatusCode:statusCode),
|
||||||
|
public(HTTPRequestHandle:HTTPRequest, bool:requestSuccessful, HTTPStatusCode:statusCode, any:contextData),
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
native HTTPRequestHandle:Steam_CreateHTTPRequest(HTTPMethod:HTTPRequestMethod, const String:absoluteURL[]);
|
||||||
|
native Steam_SetHTTPRequestNetworkActivityTimeout(HTTPRequestHandle:HTTPRequest, timeoutSeconds);
|
||||||
|
native Steam_SetHTTPRequestHeaderValue(HTTPRequestHandle:HTTPRequest, const String:headerName[], const String:headerValue[]);
|
||||||
|
native Steam_SetHTTPRequestGetOrPostParameter(HTTPRequestHandle:HTTPRequest, const String:paramName[], const String:paramValue[]);
|
||||||
|
native bool:Steam_SendHTTPRequest(HTTPRequestHandle:HTTPRequest, HTTPRequestComplete:callbackFunction, any:contextData = 0);
|
||||||
|
native Steam_DeferHTTPRequest(HTTPRequestHandle:HTTPRequest);
|
||||||
|
native Steam_PrioritizeHTTPRequest(HTTPRequestHandle:HTTPRequest);
|
||||||
|
native Steam_GetHTTPResponseHeaderSize(HTTPRequestHandle:HTTPRequest, const String:headerName[]);
|
||||||
|
native Steam_GetHTTPResponseHeaderValue(HTTPRequestHandle:HTTPRequest, const String:headerName[], String:headerValueBuffer[], bufferSize);
|
||||||
|
native Steam_GetHTTPResponseBodySize(HTTPRequestHandle:HTTPRequest);
|
||||||
|
native Steam_GetHTTPResponseBodyData(HTTPRequestHandle:HTTPRequest, String:bodyDataBuffer[], bufferSize);
|
||||||
|
native Steam_WriteHTTPResponseBody(HTTPRequestHandle:HTTPRequest, const String:filePath[]);
|
||||||
|
native Steam_ReleaseHTTPRequest(HTTPRequestHandle:HTTPRequest);
|
||||||
|
native Float:Steam_GetHTTPDownloadProgressPercent(HTTPRequestHandle:HTTPRequest);
|
||||||
|
native bool:Steam_SetHTTPRequestRawPostBody(HTTPRequestHandle:HTTPRequest, const String:data[], dataLength, const String:contentType[]="text/plain");
|
||||||
|
native bool:Steam_SetHTTPRequestRawPostBodyFile(HTTPRequestHandle:HTTPRequest, const String:filePath[], const String:contentType[]="text/plain");
|
||||||
|
|
||||||
|
public Extension:__ext_SteamTools =
|
||||||
|
{
|
||||||
|
name = "SteamTools",
|
||||||
|
file = "steamtools.ext",
|
||||||
|
#if defined AUTOLOAD_EXTENSIONS
|
||||||
|
autoload = 1,
|
||||||
|
#else
|
||||||
|
autoload = 0,
|
||||||
|
#endif
|
||||||
|
#if defined REQUIRE_EXTENSIONS
|
||||||
|
required = 1,
|
||||||
|
#else
|
||||||
|
required = 0,
|
||||||
|
#endif
|
||||||
|
}
|
||||||
Reference in new issue
Block a user