added updated required includes

This commit is contained in:
drhax9908 authored and GitHub committed 2020-11-29 16:07:39 -08:00
1 parent 0158f733b8
commit 76d7081547
5 files changed
+3171

No files matched your search

+413
View File
@@ -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
+565
View File
@@ -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
+668
View File
@@ -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
+319
View File
@@ -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
}