libmtdac_mtd.h - Core types / macros
#include <libmtdac/mtd.h>
This header file contains the public interface to the library.
#define LIBMTDAC_MAJOR_VERSION
#define LIBMTDAC_MINOR_VERSION
#define LIBMTDAC_MICRO_VERSIONThese are integers that contain the library version.
#define MTD_OPT_LOG_ERR
#define MTD_OPT_LOG_INFO
#define MTD_OPT_LOG_DEBUG_DATA
#define MTD_OPT_LOG_DEBUG_ALLThese set the desired log level. Defaults to MTD_OPT_LOG_ERR
There is a MTD_OPT_LOG_DEBUG compatibility macro that is an alias for MTD_OPT_LOG_DEBUG_ALL
#define MTD_OPT_ACT_MOBILE_APP_DIRECT
#define MTD_OPT_ACT_DESKTOP_APP_DIRECT
#define MTD_OPT_ACT_MOBILE_APP_VIA_SERVER
#define MTD_OPT_ACT_DESKTOP_APP_VIA_SERVER
#define MTD_OPT_ACT_WEB_APP_VIA_SERVER
#define MTD_OPT_ACT_BATCH_PROCESS_DIRECT
#define MTD_OPT_ACT_OTHER_DIRECT
#define MTD_OPT_ACT_OTHER_VIA_SERVERThese set the application connection method. One of these should be set.
#define MTD_OPT_NO_ANTI_FRAUD_HDRS
#define MTD_OPT_SND_EMPTY_HDRSDon't sent anti-fraud headers and send headers that have no value rather than skipping them respectively.
#define MTD_OPT_GLOBAL_INITCan be passed to mtd_init(3) in single threaded applications instead of calling mtd_global_init(3).
#define MTD_OPT_PRODUCTION_APIUse the production rather than sandbox API.
enum mtd_vldt_fmt {
MTD_VLDT_FMT_ACCOUNT_NAME,
MTD_VLDT_FMT_BUSINESS_ID,
MTD_VLDT_FMT_CALCULATION_ID,
MTD_VLDT_FMT_CHARITY_NAME,
MTD_VLDT_FMT_COMPANY_NAME,
MTD_VLDT_FMT_COMPANY_NUMBER,
MTD_VLDT_FMT_EMPLOYER_NAME,
MTD_VLDT_FMT_EMPLOYER_REF,
MTD_VLDT_FMT_EMPLOYMENT_ID,
MTD_VLDT_FMT_ID_15,
MTD_VLDT_FMT_I_F_NAME,
MTD_VLDT_FMT_ISO_8601_DATE,
MTD_VLDT_FMT_LOSS_ID,
MTD_VLDT_FMT_NINO,
MTD_VLDT_FMT_PAYROLL_ID,
MTD_VLDT_FMT_PERIOD_ID,
MTD_VLDT_FMT_REF,
MTD_VLDT_FMT_SCHEME_REF,
MTD_VLDT_FMT_SCHEME_REF_TAS,
MTD_VLDT_FMT_TAX_YEAR,
MTD_VLDT_FMT_UUID,
MTD_VLDT_FMT_UUID_89AB,
};Aliases for some of the above
#define MTD_VLDT_FMT_ASSET_DESC MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_BENEFIT_ID MTD_VLDT_FMT_UUID_89AB
#define MTD_VLDT_FMT_BUILDING_NAME MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_BUILDING_NUMBER MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_CORRELATION_ID MTD_VLDT_FMT_UUID
#define MTD_VLDT_FMT_CUSTOMER_REF MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_EMPLOYMENT_ID MTD_VLDT_FMT_UUID_89AB
#define MTD_VLDT_FMT_EVENT MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_HOLDING_COMPANY_NAME MTD_VLDT_FMT_I_F_NAME
#define MTD_VLDT_FMT_POSTCODE MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_QOPS_REF MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_REPORT_ID MTD_VLDT_FMT_UUID
#define MTD_VLDT_FMT_SAVINGS_ACCOUNT_NAME MTD_VLDT_FMT_ACCOUNT_NAME
#define MTD_VLDT_FMT_SAVINGS_ACCOUNT_ID MTD_VLDT_FMT_ID_15
#define MTD_VLDT_FMT_SF74_REF MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_SUBMISSION_ID MTD_VLDT_FMT_UUID_89AB
#define MTD_VLDT_FMT_TAXATION_REF MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_TAXATION_TREATY MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_UNIQUE_INVESTMENT_REF MTD_VLDT_FMT_REFenum mtd_error {
MTD_ERR_NONE = 0,
MTD_ERR_OS,
MTD_ERR_REQUEST,
MTD_ERR_CURL,
MTD_ERR_NEEDS_AUTHORISATION,
MTD_ERR_UNKNOWN_FLAGS,
MTD_ERR_UNKNOWN_SCOPES,
MTD_ERR_LIB_TOO_OLD,
MTD_ERR_CONFIG_DIR_UNSPEC,
MTD_ERR_CONFIG_DIR_INVALID,
MTD_ERR_NO_CONFIG,
MTD_ERR_INVALID_SCOPE,
MTD_ERR_INVALID_ERROR
};enum mtd_hmrc_error {
MTD_HMRC_ERR_MULTIPLE = 0,
MTD_HMRC_ERR_CHARGE_REFERENCE_INVALID,
MTD_HMRC_ERR_CLIENT_OR_AGENT_NOT_AUTHORISED,
MTD_HMRC_ERR_DATE_FROM_INVALID,
MTD_HMRC_ERR_DATE_RANGE_INVALID,
MTD_HMRC_ERR_DATE_RANGE_TOO_LARGE,
MTD_HMRC_ERR_DATE_TO_INVALID,
MTD_HMRC_ERR_DUPLICATE_SUBMISSION,
MTD_HMRC_ERR_DUPLICATE_SUBMITTED_ON,
MTD_HMRC_ERR_FORMAT_ACCOUNT_NAME,
MTD_HMRC_ERR_FORMAT_ASSET_DESCRIPTION,
MTD_HMRC_ERR_FORMAT_ASSET_TYPE,
MTD_HMRC_ERR_FORMAT_BENEFIT_ID,
MTD_HMRC_ERR_FORMAT_BENEFIT_TYPE,
MTD_HMRC_ERR_FORMAT_BUSINESS_ID,
MTD_HMRC_ERR_FORMAT_BUSINESS_INCOME_2_YEARS_PRIOR,
MTD_HMRC_ERR_FORMAT_CALC_ID,
MTD_HMRC_ERR_FORMAT_CALCULATE_ACCRUED_INTEREST.
MTD_HMRC_ERR_FORMAT_CALCULATION_ID,
MTD_HMRC_ERR_FORMAT_CALCULATION_TYPE,
MTD_HMRC_ERR_FORMAT_CESSATION_DATE,
MTD_HMRC_ERR_FORMAT_CHARGE_REFERENCE,
MTD_HMRC_ERR_FORMAT_CHECKPOINT_ID,
MTD_HMRC_ERR_FORMAT_CLAIM_OR_ELECTION_CODES,
MTD_HMRC_ERR_FORMAT_CLASS_4_EXEMPTION_REASON,
MTD_HMRC_ERR_FORMAT_CLASS_OF_SHARES_ACQUIRED,
MTD_HMRC_ERR_FORMAT_CLASS_OF_SHARES_AWARDED,
MTD_HMRC_ERR_FORMAT_COMPANY_NAME,
MTD_HMRC_ERR_FORMAT_COMPANY_NUMBER,
MTD_HMRC_ERR_FORMAT_COUNTRY_CODE,
MTD_HMRC_ERR_FORMAT_CUSTOMER_PAYMENT_INFORMATION,
MTD_HMRC_ERR_FORMAT_CUSTOMER_REF,
MTD_HMRC_ERR_FORMAT_CUSTOMER_REFERENCE,
MTD_HMRC_ERR_FORMAT_DATE,
MTD_HMRC_ERR_FORMAT_DATE_OF_INVESTMENT,
MTD_HMRC_ERR_FORMAT_DEDUCTIONS_FROM_DATE,
MTD_HMRC_ERR_FORMAT_DEDUCTIONS_TO_DATE,
MTD_HMRC_ERR_FORMAT_DIRECTORSHIP_CEASED_DATE,
MTD_HMRC_ERR_FORMAT_DOC_NUMBER,
MTD_HMRC_ERR_FORMAT_DOUBLE_TAXATION_ARTICLE,
MTD_HMRC_ERR_FORMAT_DOUBLE_TAXATION_TREATY,
MTD_HMRC_ERR_FORMAT_EMPLOYER_NAME,
MTD_HMRC_ERR_FORMAT_EMPLOYER_REF,
MTD_HMRC_ERR_FORMAT_EMPLOYER_REFERENCE,
MTD_HMRC_ERR_FORMAT_EMPLOYMENT_ID,
MTD_HMRC_ERR_FORMAT_END_DATE,
MTD_HMRC_ERR_FORMAT_EVENT,
MTD_HMRC_ERR_FORMAT_FINAL_DECLARATION,
MTD_HMRC_ERR_FORMAT_FROM_DATE,
MTD_HMRC_ERR_FORMAT_FUTURE_YEARS,
MTD_HMRC_ERR_FORMAT_HISTORY,
MTD_HMRC_ERR_FORMAT_ID,
MTD_HMRC_ERR_FORMAT_INCLUDE_ESTIMATED_CHARGES,
MTD_HMRC_ERR_FORMAT_INCLUDE_LOCKS,
MTD_HMRC_ERR_FORMAT_INCOME_SOURCE,
MTD_HMRC_ERR_FORMAT_LENDER_NAME,
MTD_HMRC_ERR_FORMAT_LOSS_ID,
MTD_HMRC_ERR_FORMAT_NAME,
MTD_HMRC_ERR_FORMAT_NAME_BUSINESS,
MTD_HMRC_ERR_FORMAT_NAME_EX_SPOUSE,
MTD_HMRC_ERR_FORMAT_NAME_OF_SHIP,
MTD_HMRC_ERR_FORMAT_NATURE_OF_TRADE,
MTD_HMRC_ERR_FORMAT_NINO,
MTD_HMRC_ERR_FORMAT_PAYROLL_ID,
MTD_HMRC_ERR_FORMAT_PENSION_SCHEME_TAX_REFERENCE,
MTD_HMRC_ERR_FORMAT_PERIOD_ID,
MTD_HMRC_ERR_FORMAT_PPD_SUBMISSION_ID,
MTD_HMRC_ERR_FORMAT_PROVIDER_NAME,
MTD_HMRC_ERR_FORMAT_PROVIDERS_ADDRESS,
MTD_HMRC_ERR_FORMAT_QOPS_REF,
MTD_HMRC_ERR_FORMAT_REMOVE_PAYMENT_ON_ACCOUNT,
MTD_HMRC_ERR_FORMAT_REPORT_ID,
MTD_HMRC_ERR_FORMAT_SAVINGS_ACCOUNT_ID,
MTD_HMRC_ERR_FORMAT_SCHEME_PLAN_TYPE,
MTD_HMRC_ERR_FORMAT_SF74_REF,
MTD_HMRC_ERR_FORMAT_SOURCE,
MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_DATE_OF_BIRTH,
MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_FIRST_NAME,
MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_NINO,
MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_SURNAME,
MTD_HMRC_ERR_FORMAT_SRN_INVALID,
MTD_HMRC_ERR_FORMAT_START_DATE,
MTD_HMRC_ERR_FORMAT_STATUS,
MTD_HMRC_ERR_FORMAT_STATUS_REASON,
MTD_HMRC_ERR_FORMAT_STRING,
MTD_HMRC_ERR_FORMAT_SUBMISSION_ID,
MTD_HMRC_ERR_FORMAT_SUBMITTED_ON,
MTD_HMRC_ERR_FORMAT_TAX_SOURCE,
MTD_HMRC_ERR_FORMAT_TAX_YEAR,
MTD_HMRC_ERR_FORMAT_TO_DATE,
MTD_HMRC_ERR_FORMAT_TRANSACTION_ID,
MTD_HMRC_ERR_FORMAT_TYPE_OF_BUSINESS,
MTD_HMRC_ERR_FORMAT_TYPE_OF_LOSS,
MTD_HMRC_ERR_FORMAT_UNIQUE_INVESTMENT_REFERENCE,
MTD_HMRC_ERR_FORMAT_VALUE,
MTD_HMRC_ERR_INVALID_CREDENTIALS,
MTD_HMRC_ERR_INVALID_DATE_FROM,
MTD_HMRC_ERR_INVALID_DATE_RANGE,
MTD_HMRC_ERR_INVALID_DATE_TO,
MTD_HMRC_ERR_INVALID_MONETARY_AMOUNT,
MTD_HMRC_ERR_INVALID_NUMERIC_VALUE,
MTD_HMRC_ERR_INVALID_STATUS,
MTD_HMRC_ERR_INVALID_TAX_YEAR_PARAMETER,
MTD_HMRC_ERR_MATCHING_CALCULATION_ID_NOT_FOUND,
MTD_HMRC_ERR_MATCHING_RESOURCE_NOT_FOUND,
MTD_HMRC_ERR_MISSING_FROM_DATE,
MTD_HMRC_ERR_MISSING_OFF_PAYROLL_WORKER,
MTD_HMRC_ERR_MISSING_PAYMENT_LOT,
MTD_HMRC_ERR_MISSING_PAYMENT_LOT_ITEM,
MTD_HMRC_ERR_MISSING_TO_DATE,
MTD_HMRC_ERR_MISSING_TYPE_OF_BUSINESS,
MTD_HMRC_ERR_NOT_ALLOWED_OFF_PAYROLL_WORKER,
MTD_HMRC_ERR_NOT_FINALISED,
MTD_HMRC_ERR_NOT_FOUND,
MTD_HMRC_ERR_PERIOD_KEY_INVALID,
MTD_HMRC_ERR_RANGE_TO_DATE_BEFORE_FROM_DATE,
MTD_HMRC_ERR_RULE_ACCOUNTING_PERIOD_NOT_ENDED,
MTD_HMRC_ERR_RULE_ACCOUNTING_PERIOD_NOT_SUPPORTED,
MTD_HMRC_ERR_RULE_ACQUISITION_DATE,
MTD_HMRC_ERR_RULE_ACQUISITION_DATE_AFTER_DISPOSAL_DATE,
MTD_HMRC_ERR_RULE_ACTIVE_MARRIAGE_ALLOWANCE_CLAIM,
MTD_HMRC_ERR_RULE_ADVANCE_SUBMISSION_REQUIRES_PERIOD_END_DATE,
MTD_HMRC_ERR_RULE_ALLOWANCE_NOT_SUPPORTED,
MTD_HMRC_ERR_RULE_ALREADY_ADJUSTED,
MTD_HMRC_ERR_RULE_ALREADY_OPTED_IN,
MTD_HMRC_ERR_RULE_ALREADY_OPTED_OUT,
MTD_HMRC_ERR_RULE_AMOUNT_GAIN_LOSS,
MTD_HMRC_ERR_RULE_BENEFIT_TYPE_EXISTS,
MTD_HMRC_ERR_RULE_BFL_NOT_SUPPORTED_FOR_FHL_PROPERTIES,
MTD_HMRC_ERR_RULE_BOTH_ALLOWANCES_SUPPLIED,
MTD_HMRC_ERR_RULE_BOTH_EXPENSES_SUPPLIED,
MTD_HMRC_ERR_RULE_BOTH_PROPERTIES_SUPPLIED,
MTD_HMRC_ERR_RULE_BUILDING_NAME_NUMBER,
MTD_HMRC_ERR_RULE_BUSINESS_ID_NOT_FOUND,
MTD_HMRC_ERR_RULE_BUSINESS_ID_STATE_CONFLICT,
MTD_HMRC_ERR_RULE_BUSINESS_INCOME_PERIOD_RESTRICTION,
MTD_HMRC_ERR_RULE_BUSINESS_PARTNER_NOT_EXIST,
MTD_HMRC_ERR_RULE_BUSINESS_VALIDATION_FAILURE,
MTD_HMRC_ERR_RULE_CALCULATION_IN_PROGRESS,
MTD_HMRC_ERR_RULE_CALCULATION_TYPE_NOT_ALLOWED,
MTD_HMRC_ERR_RULE_CESSATION_DATE,
MTD_HMRC_ERR_RULE_CESSATION_DATE_BEFORE_START_DATE,
MTD_HMRC_ERR_RULE_CESSATION_DATE_BEFORE_TAX_YEAR_START,
MTD_HMRC_ERR_RULE_COMPLETION_DATE,
MTD_HMRC_ERR_RULE_COST_OF_MATERIALS,
MTD_HMRC_ERR_RULE_COUNTRY_CODE,
MTD_HMRC_ERR_RULE_CUSTOM_EMPLOYMENT,
MTD_HMRC_ERR_RULE_DATE_CEASED,
MTD_HMRC_ERR_RULE_DATE_RANGE_INVALID,
MTD_HMRC_ERR_RULE_DECEASED_RECIPIENT,
MTD_HMRC_ERR_RULE_DECLARATION_NOT_RECEIVED,
MTD_HMRC_ERR_RULE_DEDUCTIONS_AMOUNT,
MTD_HMRC_ERR_RULE_DEDUCTIONS_DATE_RANGE_INVALID,
MTD_HMRC_ERR_RULE_DELETE_AFTER_FINAL_DECLARATION,
MTD_HMRC_ERR_RULE_DELETE_FORBIDDEN,
MTD_HMRC_ERR_RULE_DIRECTORSHIP_CEASED_DATE,
MTD_HMRC_ERR_RULE_DISPOSAL_DATE,
MTD_HMRC_ERR_RULE_DISPOSAL_DATE_FUTURE,
MTD_HMRC_ERR_RULE_DUPLICATE_COUNTRY_CODE,
MTD_HMRC_ERR_RULE_DUPLICATE_ID_NOT_ALLOWED,
MTD_HMRC_ERR_RULE_DUPLICATE_PERIOD,
MTD_HMRC_ERR_RULE_DUPLICATE_SUBMISSION,
MTD_HMRC_ERR_RULE_DUPLICATED_PPD_SUBMISSION_ID,
MTD_HMRC_ERR_RULE_EARLY_DATA_SUBMISSION_NOT_ACCEPTED,
MTD_HMRC_ERR_RULE_ELECTION_PERIOD_NOT_EXPIRED,
MTD_HMRC_ERR_RULE_END_DATE,
MTD_HMRC_ERR_RULE_END_DATE_BEFORE_START_DATE,
MTD_HMRC_ERR_RULE_END_DATE_BEFORE_TAX_YEAR_START,
MTD_HMRC_ERR_RULE_END_DATE_NOT_ALIGNED_WITH_REPORTING_TYPE,
MTD_HMRC_ERR_RULE_FINAL_DECLARATION_IN_PROGRESS,
MTD_HMRC_ERR_RULE_FINAL_DECLARATION_RECEIVED,
MTD_HMRC_ERR_RULE_FINAL_DECLARATION_TAX_YEAR,
MTD_HMRC_ERR_RULE_FROM_DATE_NOT_SUPPORTED,
MTD_HMRC_ERR_RULE_GAIN_AFTER_RELIEF_LOSS_AFTER_RELIEF,
MTD_HMRC_ERR_RULE_GAIN_LOSS,
MTD_HMRC_ERR_RULE_GIFT_AID_NON_UK_AMOUNT_WITHOUT_NAMES,
MTD_HMRC_ERR_RULE_GIFTS_NON_UK_AMOUNT_WITHOUT_NAMES,
MTD_HMRC_ERR_RULE_GROSS_AMOUNT_PAID,
MTD_HMRC_ERR_RULE_IGNORE_FORBIDDEN,
MTD_HMRC_ERR_RULE_INCOME_SOURCES_CHANGED,
MTD_HMRC_ERR_RULE_INCOME_SOURCES_INVALID,
MTD_HMRC_ERR_RULE_INCONSISTENT_QUERY_PARAMS,
MTD_HMRC_ERR_RULE_INCORRECT_DISPOSAL_TYPE,
MTD_HMRC_ERR_RULE_INCORRECT_GOV_TEST_SCENARIO,
MTD_HMRC_ERR_RULE_INCORRECT_NON_STANDARD_GAINS,
MTD_HMRC_ERR_RULE_INCORRECT_OR_EMPTY_BODY_SUBMITTED,
MTD_HMRC_ERR_RULE_INSOLVENT_TRADER,
MTD_HMRC_ERR_RULE_INVALID_DATE_RANGE,
MTD_HMRC_ERR_RULE_INVALID_REQUEST,
MTD_HMRC_ERR_RULE_INVALID_SUBMISSION_PENSION_SCHEME,
MTD_HMRC_ERR_RULE_IS_ANNUAL_ALLOWANCE_REDUCED,
MTD_HMRC_ERR_RULE_ITSA_CONTRACT_OBJECT_NOT_EXIST,
MTD_HMRC_ERR_RULE_LUMP_SUMS,
MTD_HMRC_ERR_RULE_MISALIGNED_PERIOD,
MTD_HMRC_ERR_RULE_MISSING_CLOSE_COMPANY,
MTD_HMRC_ERR_RULE_MISSING_CLOSE_COMPANY_DETAILS,
MTD_HMRC_ERR_RULE_MISSING_SUBMISSION_DATES,
MTD_HMRC_ERR_RULE_NO_ACCOUNTING_DATE_FOUND,
MTD_HMRC_ERR_RULE_NO_ACCOUNTING_PERIOD,
MTD_HMRC_ERR_RULE_NO_CHANGE,
MTD_HMRC_ERR_RULE_NO_INCOME_SUBMISSIONS_EXIST,
MTD_HMRC_ERR_RULE_NOT_ALLOWED_CONSOLIDATED_EXPENSES,
MTD_HMRC_ERR_RULE_NOT_CONTIGUOUS_PERIOD,
MTD_HMRC_ERR_RULE_OBLIGATIONS_NOT_MET,
MTD_HMRC_ERR_RULE_OUTSIDE_AMENDMENT_WINDOW,
MTD_HMRC_ERR_RULE_OVER_CONSOLIDATED_EXPENSES_THRESHOLD,
MTD_HMRC_ERR_RULE_OVERLAPPING_PERIOD,
MTD_HMRC_ERR_RULE_PERIODS_OF_ACCOUNT,
MTD_HMRC_ERR_RULE_PREMATURE_FINALISATION,
MTD_HMRC_ERR_RULE_PROPERTY_INCOME_ALLOWANCE,
MTD_HMRC_ERR_RULE_PROPERTY_INCOME_ALLOWANCE_CLAIMED,
MTD_HMRC_ERR_RULE_QUARTERLY_PERIOD_UPDATING,
MTD_HMRC_ERR_RULE_RECENT_SUBMISSIONS_EXIST,
MTD_HMRC_ERR_RULE_REQUEST_CANNOT_BE_FULFILLED,
MTD_HMRC_ERR_RULE_RESIDENCY_CHANGED,
MTD_HMRC_ERR_RULE_RESULTING_VALUE_NOT_PERMITTED,
MTD_HMRC_ERR_RULE_START_DATE,
MTD_HMRC_ERR_RULE_START_AND_END_DATE_NOT_ALLOWED,
MTD_HMRC_ERR_RULE_START_DATE_AFTER_TAX_YEAR_END,
MTD_HMRC_ERR_RULE_START_DATE_NOT_ALIGNED_TO_COMMENCEMENT_DATE,
MTD_HMRC_ERR_RULE_START_DATE_NOT_ALIGNED_WITH_REPORTING_TYPE,
MTD_HMRC_ERR_RULE_SOURCE_INVALID,
MTD_HMRC_ERR_RULE_SUBMISSION_END_DATE_CANNOT_MOVE_BACKWARDS,
MTD_HMRC_ERR_RULE_SUBMISSION_FAILED,
MTD_HMRC_ERR_RULE_SUMMARY_STATUS_INVALID,
MTD_HMRC_ERR_RULE_SUMMARY_STATUS_SUPERSEDED,
MTD_HMRC_ERR_RULE_TAX_YEAR_FOR_VERSION_NOT_SUPPORTED,
MTD_HMRC_ERR_RULE_TAX_YEAR_NOT_ENDED,
MTD_HMRC_ERR_RULE_TAX_YEAR_NOT_SUPPORTED,
MTD_HMRC_ERR_RULE_TAX_YEAR_RANGE_EXCEEDED,
MTD_HMRC_ERR_RULE_TAX_YEAR_RANGE_INVALID,
MTD_HMRC_ERR_RULE_TO_DATE_BEFORE_FROM_DATE,
MTD_HMRC_ERR_RULE_TRADING_INCOME_ALLOWANCE_CLAIMED,
MTD_HMRC_ERR_RULE_TYPE_OF_BUSINESS_INCORRECT,
MTD_HMRC_ERR_RULE_UNALIGNED_CESSATION_TAX_YEAR,
MTD_HMRC_ERR_RULE_UNALIGNED_DEDUCTIONS_PERIOD,
MTD_HMRC_ERR_RULE_UNIGNORE_FORBIDDEN,
MTD_HMRC_ERR_RULE_UPDATE_FORBIDDEN,
MTD_HMRC_ERR_RULE_VOLUNTARY_CLASS2_CANNOT_BE_CHANGED,
MTD_HMRC_ERR_RULE_VOLUNTARY_CLASS2_VALUE_INVALID,
MTD_HMRC_ERR_RULE_WRONG_TPA_AMOUNT_SUBMITTED,
MTD_HMRC_ERR_TAX_PERIOD_NOT_ENDED,
MTD_HMRC_ERR_VAT_NET_VALUE,
MTD_HMRC_ERR_VAT_TOTAL_VALUE,
MTD_HMRC_ERR_VRN_INVALID,
/* Generic top-level errors */
MTD_HMRC_ERR_BUSINESS_ERROR,
MTD_HMRC_ERR_INVALID_REQUEST,
MTD_HMRC_ERR_UNKNOWN
};
struct mtd_hmrc_err {
enum mtd_hmrc_error error;
const char *code;
const char *msg;
struct mtd_hmrc_err *next;
};Structure as returned by mtd_hmrc_get_error(3). Actually it's a linked list of structures with the next member pointing to the next structure or NULL. See mtd_hmrc_err(3type).
Should be freed with mtd_hmrc_free_error(3).
enum mtd_http_status_code {
MTD_HTTP_OK = 200,
MTD_HTTP_CREATED = 201,
MTD_HTTP_ACCEPTED = 202,
MTD_HTTP_NO_CONTENT = 204,
MTD_HTTP_SEE_OTHER = 303,
MTD_HTTP_BAD_REQUEST = 400,
MTD_HTTP_UNAUTHORIZED = 401,
MTD_HTTP_FORBIDDEN = 403,
MTD_HTTP_NOT_FOUND = 404,
MTD_HTTP_METHOD_NOT_ALLOWED = 405,
MTD_HTTP_NOT_ACCEPTABLE = 406,
MTD_HTTP_GONE = 410,
MTD_HTTP_REQUEST_ENTITY_TOO_LARGE = 413,
MTD_HTTP_UNSUPPORTED_MEDIA_TYPE = 415,
MTD_HTTP_UNPROCESSABLE_CONTENT = 422,
MTD_HTTP_TOO_MANY_REQUESTS = 429,
MTD_HTTP_INTERNAL_SERVER_ERROR = 500,
MTD_HTTP_NOT_IMPLEMENTED = 501,
MTD_HTTP_SERVICE_UNAVAILABLE = 503,
MTD_HTTP_GATEWAY_TIMEOUT = 504,
};enum mtd_scope {
MTD_SCOPE_RD_SA = 0x1,
MTD_SCOPE_WR_SA = 0x2,
MTD_SCOPE_RD_SAASS = 0x4,
MTD_SCOPE_WR_SAASS = 0x8,
MTD_SCOPE_RD_VAT = 0x10,
MTD_SCOPE_WR_VAT = 0x20,
};RD = Read, WR = write, SA = Self-Assessment (ITSA). SAASS Self-Assessment Assist (ITSA). They can be OR'd together.
They represent the various OAuth scopes that an application can be authorised for.
enum mtd_api_scope {
MTD_API_SCOPE_UNSET = 0x0,
MTD_API_SCOPE_SA = 0x1,
MTD_API_SCOPE_SAASS = 0x2,
MTD_API_SCOPE_VAT = 0x4,
/*
* Special value to tell we are adding more API
* OAuths and _not_ to reset the oauth.json file.
*
* This can be bitwise OR'd with any of the above.
*/
MTD_API_SCOPE_ADD = (1 << 29),
};
#define MTD_API_SCOPE_ITSA MTD_API_SCOPE_SAWhat API the above scopes belong to. They can be OR'd together. MTD_API_SCOPE_ADD can be used to avoid resetting the oauth.json file when writing to it. Say you added SA but then later want to also add SAASS...
enum mtd_ep_api {
MTD_EP_API_NULL = 0,
MTD_EP_API_BD, /* Business Details */
MTD_EP_API_BISS, /* Business Income Source Summary */
MTD_EP_API_BSAS, /* Business Source Adjustable Summary */
MTD_EP_API_CISD, /* CIS Deductions */
MTD_EP_API_IC, /* Individuals Charges */
MTD_EP_API_ICAL, /* Individual Calculations */
MTD_EP_API_ICGI, /* Individuals Capital Gains Income */
MTD_EP_API_ID, /* Individuals Disclosures */
MTD_EP_API_IDI, /* Individuals Dividends Income */
MTD_EP_API_IE, /* Individuals Expenses */
MTD_EP_API_IEI, /* Individuals Employments Income */
MTD_EP_API_IFI, /* Individuals Foreign Income */
MTD_EP_API_IIPI, /* Individuals Insurance Policies Income */
MTD_EP_API_ILOS, /* Individual Losses */
MTD_EP_API_IOI, /* Individuals Other Income */
MTD_EP_API_IPI, /* Individuals Pensions Income */
MTD_EP_API_IR, /* Individuals Reliefs */
MTD_EP_API_ISB, /* Individuals Savings Income */
MTD_EP_API_ISI, /* Individuals State Benefits */
MTD_EP_API_OB, /* Obligations */
MTD_EP_API_OD, /* Other Deductions */
MTD_EP_API_PB, /* Property Business */
MTD_EP_API_SAA, /* Self Assessment Accounts */
MTD_EP_API_SAASS, /* Self Assessment Assist */
MTD_EP_API_SAID, /* Self Assessment Individual Details */
MTD_EP_API_SEB, /* Self Employment Business */
MTD_EP_API_VAT, /* VAT */
MTD_EP_API_TEST_CU, /* Create Test User */
MTD_EP_API_TEST_FPH, /* Test Fraud Prevention Headers */
MTD_EP_API_TEST_SATS, /* Self Assessment Test Support */
};enum mtd_api_endpoint {
/* Business Details - Support */
MTD_API_EP_BD_LIST = 0,
MTD_API_EP_BD_GET,
MTD_API_EP_BD_AMEND_QPT,
/* Accounting Type */
MTD_API_EP_BD_AT_GET,
MTD_API_EP_BD_AT_AMEND,
/* Periods of Account */
MTD_API_EP_BD_POA_GET,
MTD_API_EP_BD_POA_AMEND,
/* Late Accounting Date Rule */
MTD_API_EP_BD_LADR_GET,
MTD_API_EP_BD_LADR_DISAPPLY,
MTD_API_EP_BD_LADR_WITHDRAW,
/* Business Income Source Summary */
MTD_API_EP_BISS_GET,
/* Business Source Adjustable Summary */
MTD_API_EP_BSAS_LIST,
MTD_API_EP_BSAS_TRIGGER,
/* Self-Employment */
MTD_API_EP_BSAS_SE_GET,
MTD_API_EP_BSAS_SE_SUBMIT,
/* UK Property */
MTD_API_EP_BSAS_PB_GET,
MTD_API_EP_BSAS_PB_SUBMIT,
/* Foreign Property */
MTD_API_EP_BSAS_FP_GET,
MTD_API_EP_BSAS_FP_SUBMIT,
/* CIS Deductions */
MTD_API_EP_CISD_GET,
MTD_API_EP_CISD_CREATE,
MTD_API_EP_CISD_AMEND,
MTD_API_EP_CISD_DELETE,
/* Individuals Charges - Pension Charges */
MTD_API_EP_IC_PC_GET,
MTD_API_EP_IC_PC_AMEND,
MTD_API_EP_IC_PC_DELETE,
/* High Income Child Benefit Charge Submission */
MTD_API_EP_IC_HICBCS_GET,
MTD_API_EP_IC_HICBCS_AMEND,
MTD_API_EP_IC_HICBCS_DELETE,
/* Individual Calculations - Tax Calculations */
MTD_API_EP_ICAL_TRIGGER,
MTD_API_EP_ICAL_LIST,
MTD_API_EP_ICAL_GET,
/* Final Declaration */
MTD_API_EP_ICAL_FINAL_DECLARATION,
/* Individuals Capital Gains Income - Residential Property Disposals */
MTD_API_EP_ICGI_RPD_GET,
MTD_API_EP_ICGI_RPD_N_PPD_AMEND,
MTD_API_EP_ICGI_RPD_N_PPD_DELETE,
MTD_API_EP_ICGI_RPD_PPD_AMEND,
MTD_API_EP_ICGI_RPD_PPD_DELETE,
/* Other Capital Gains and Disposals */
MTD_API_EP_ICGI_O_GET,
MTD_API_EP_ICGI_O_AMEND,
MTD_API_EP_ICGI_O_DELETE,
/* Individuals Disclosures - Marriage Allowance */
MTD_API_EP_ID_MA_CREATE,
/* Disclosures */
MTD_API_EP_ID_D_GET,
MTD_API_EP_ID_D_AMEND,
MTD_API_EP_ID_D_DELETE,
/* Individuals Dividends Income - Dividends Income */
MTD_API_EP_IDI_DI_GET,
MTD_API_EP_IDI_DI_AMEND,
MTD_API_EP_IDI_DI_DELETE,
/* UK Dividends Income */
MTD_API_EP_IDI_UKDI_GET,
MTD_API_EP_IDI_UKDI_AMEND,
MTD_API_EP_IDI_UKDI_DELETE,
/* Additional Directorship and Dividend Information */
MTD_API_EP_IDI_ADDI_GET,
MTD_API_EP_IDI_ADDI_AMEND,
MTD_API_EP_IDI_ADDI_DELETE,
/* Individuals Employments Income - Employments */
MTD_API_EP_IEI_E_LIST,
MTD_API_EP_IEI_E_ADD,
MTD_API_EP_IEI_E_GET,
MTD_API_EP_IEI_E_AMEND,
MTD_API_EP_IEI_E_DELETE,
MTD_API_EP_IEI_E_IGNORE,
MTD_API_EP_IEI_E_UNIGNORE,
MTD_API_EP_IEI_E_EFD_GET,
MTD_API_EP_IEI_E_EFD_AMEND,
MTD_API_EP_IEI_E_EFD_DELETE,
/* Non-PAYE Employment Income */
MTD_API_EP_IEI_NPE_GET,
MTD_API_EP_IEI_NPE_AMEND,
MTD_API_EP_IEI_NPE_DELETE,
/* Other Employment Income */
MTD_API_EP_IEI_OE_GET,
MTD_API_EP_IEI_OE_AMEND,
MTD_API_EP_IEI_OE_DELETE,
/* Student Loan Benefits in Kind */
MTD_API_EP_IEI_SLB_GET,
MTD_API_EP_IEI_SLB_AMEND,
MTD_API_EP_IEI_SLB_DELETE,
/* Individuals Expenses - Employment Expenses */
MTD_API_EP_IE_EE_AMEND,
MTD_API_EP_IE_EE_GET,
MTD_API_EP_IE_EE_DELETE,
MTD_API_EP_IE_EE_IGNORE,
/* Other Expenses */
MTD_API_EP_IE_OE_AMEND,
MTD_API_EP_IE_OE_GET,
MTD_API_EP_IE_OE_DELETE,
/* Individuals Foreign Income */
MTD_API_EP_IFI_AMEND,
MTD_API_EP_IFI_GET,
MTD_API_EP_IFI_DELETE,
/* Individuals Insurance Policies Income */
MTD_API_EP_IIPI_GET,
MTD_API_EP_IIPI_AMEND,
MTD_API_EP_IIPI_DELETE,
/* Individual Losses - Brought Forward */
MTD_API_EP_ILOS_BF_CREATE,
MTD_API_EP_ILOS_BF_AMEND_AMNT,
MTD_API_EP_ILOS_BF_LIST,
MTD_API_EP_ILOS_BF_GET,
MTD_API_EP_ILOS_BF_DELETE,
/* Loss Claims */
MTD_API_EP_ILOS_LC_CREATE,
MTD_API_EP_ILOS_LC_LIST,
MTD_API_EP_ILOS_LC_GET,
MTD_API_EP_ILOS_LC_DELETE,
MTD_API_EP_ILOS_LC_AMEND_TYPE,
MTD_API_EP_ILOS_LC_AMEND_ORDER,
/* Individuals Other Income */
MTD_API_EP_IOI_GET,
MTD_API_EP_IOI_AMEND,
MTD_API_EP_IOI_DELETE,
/* Individuals Pensions Income */
MTD_API_EP_IPI_GET,
MTD_API_EP_IPI_AMEND,
MTD_API_EP_IPI_DELETE,
/* Individuals Reliefs - Relief Investments */
MTD_API_EP_IR_RI_GET,
MTD_API_EP_IR_RI_AMEND,
MTD_API_EP_IR_RI_DELETE,
/* Other Reliefs */
MTD_API_EP_IR_OR_GET,
MTD_API_EP_IR_OR_AMEND,
MTD_API_EP_IR_OR_DELETE,
/* Foreign Reliefs */
MTD_API_EP_IR_FR_GET,
MTD_API_EP_IR_FR_AMEND,
MTD_API_EP_IR_FR_DELETE,
/* Pensions Reliefs */
MTD_API_EP_IR_PR_GET,
MTD_API_EP_IR_PR_AMEND,
MTD_API_EP_IR_PR_DELETE,
/* Charitable Givings */
MTD_API_EP_IR_CG_GET,
MTD_API_EP_IR_CG_AMEND,
MTD_API_EP_IR_CG_DELETE,
/* Individuals State Benefits */
MTD_API_EP_ISB_CREATE,
MTD_API_EP_ISB_LIST,
MTD_API_EP_ISB_AMEND,
MTD_API_EP_ISB_DELETE,
MTD_API_EP_ISB_AMEND_AMNTS,
MTD_API_EP_ISB_DELETE_AMNTS,
MTD_API_EP_ISB_IGNORE,
MTD_API_EP_ISB_UNIGNORE,
/* Individuals Savings Income - UK Savings Account */
MTD_API_EP_ISI_SI_UK_LIST,
MTD_API_EP_ISI_SI_UK_ADD,
MTD_API_EP_ISI_SI_UK_UPDATE_SA_NAME,
MTD_API_EP_ISI_SI_UK_GET_AS,
MTD_API_EP_ISI_SI_UK_UPDATE_AS,
/* Savings Income */
MTD_API_EP_ISI_SI_O_GET,
MTD_API_EP_ISI_SI_O_UPDATE,
MTD_API_EP_ISI_SI_O_DELETE,
/* Obligations */
MTD_API_EP_OB_GET_IEO,
MTD_API_EP_OB_GET_FDO,
/* Other Deductions */
MTD_API_EP_OD_AMEND,
MTD_API_EP_OD_GET,
MTD_API_EP_OD_DELETE,
/* Property Business - UK Property Business Annual Submission */
MTD_API_EP_PB_UKPBAS_GET,
MTD_API_EP_PB_UKPBAS_CREATE,
/* UK Property Income & Expenses Period Summary */
MTD_API_EP_PB_UKPIEPS_CREATE,
MTD_API_EP_PB_UKPIEPS_GET,
MTD_API_EP_PB_UKPIEPS_AMEND,
/* UK Property Cumulative Period Summary */
MTD_API_EP_PB_UKPCPS_GET,
MTD_API_EP_PB_UKPCPS_CREATE,
/* Historic FHL UK Property Business Annual Submission */
MTD_API_EP_PB_HFHL_UKPBAS_CREATE,
MTD_API_EP_PB_HFHL_UKPBAS_GET,
MTD_API_EP_PB_HFHL_UKPBAS_DELETE,
/* Historic non-FHL UK Property Business Annual Submission */
MTD_API_EP_PB_HNFHL_UKPBAS_CREATE,
MTD_API_EP_PB_HNFHL_UKPBAS_GET,
MTD_API_EP_PB_HNFHL_UKPBAS_DELETE,
/* Historic FHL UK Property Income & Expenses Period Summary */
MTD_API_EP_PB_HFHL_UKPIEPS_LIST,
MTD_API_EP_PB_HFHL_UKPIEPS_CREATE,
MTD_API_EP_PB_HFHL_UKPIEPS_AMEND,
MTD_API_EP_PB_HFHL_UKPIEPS_GET,
/* Historic non-FHL UK Property Income & Expenses Period Summary */
MTD_API_EP_PB_HNFHL_UKPIEPS_LIST,
MTD_API_EP_PB_HNFHL_UKPIEPS_CREATE,
MTD_API_EP_PB_HNFHL_UKPIEPS_GET,
MTD_API_EP_PB_HNFHL_UKPIEPS_AMEND,
/* Foreign Property Income & Expenses Period Summary */
MTD_API_EP_PB_FPIEPS_CREATE,
MTD_API_EP_PB_FPIEPS_GET,
MTD_API_EP_PB_FPIEPS_AMEND,
/* Foreign Property Cumulative Period Summary */
MTD_API_EP_PB_FPCPS_GET,
MTD_API_EP_PB_FPCPS_AMEND,
/* Foreign Property Annual Submission */
MTD_API_EP_PB_FPAS_GET,
MTD_API_EP_PB_FPAS_AMEND,
/* UK or Foreign Property Annual Submission Deletion */
MTD_API_EP_PB_AS_DELETE,
/* UK or Foreign Property Income and Expenses Period Summaries List */
MTD_API_EP_PB_PIEPS_LIST,
/* Self Assessment Accounts - Payments and Liabilities */
MTD_API_EP_SAA_PL_HIST,
MTD_API_EP_SAA_PL_GET_BY_TID,
MTD_API_EP_SAA_PL_GET_BY_CR,
MTD_API_EP_SAA_PL_GET_BAL_TRANS,
MTD_API_EP_SAA_PL_PA_LIST,
/* Coding Out Underpayments and Debts */
MTD_API_EP_SAA_COUD_GET,
MTD_API_EP_SAA_COUD_AMEND,
MTD_API_EP_SAA_COUD_DELETE,
/* Coding Out Status */
MTD_API_EP_SAA_COS_OPT_OUT,
MTD_API_EP_SAA_COS_OPT_STATUS,
MTD_API_EP_SAA_COS_OPT_IN,
/* Self Assessment Assist */
MTD_API_EP_SAASS_REPORT_GEN,
MTD_API_EP_SAASS_REPORT_ACK,
/* Self Assessment Individual Details */
MTD_API_EP_SAID_STATUS,
/* Self Employment Business - Self-Employment Annual Submission */
MTD_API_EP_SEB_SEAS_AMEND,
MTD_API_EP_SEB_SEAS_GET,
MTD_API_EP_SEB_SEAS_DELETE,
/* Self-Employment Period Summaries */
MTD_API_EP_SEB_SEPS_CREATE,
MTD_API_EP_SEB_SEPS_LIST,
MTD_API_EP_SEB_SEPS_AMEND,
MTD_API_EP_SEB_SEPS_GET,
/* Self-Employment Cumulative Period Summary */
MTD_API_EP_SEB_SECPS_AMEND,
MTD_API_EP_SEB_SECPS_GET,
/* VAT */
MTD_API_EP_VAT_LIST_OBLIGATIONS,
MTD_API_EP_VAT_SUBMIT,
MTD_API_EP_VAT_VIEW_RETURN,
MTD_API_EP_VAT_GET_LIABILITIES,
MTD_API_EP_VAT_GET_PAYMENTS,
MTD_API_EP_VAT_GET_PENALTIES,
MTD_API_EP_VAT_GET_FINANCIAL_DETAILS,
/* Create Test User */
MTD_API_EP_TEST_CU_CREATE_INDIVIDUAL,
MTD_API_EP_TEST_CU_CREATE_ORGANISATION,
MTD_API_EP_TEST_CU_CREATE_AGENT,
MTD_API_EP_TEST_CU_LIST_SERVICES,
/* Test Fraud Prevention Headers */
MTD_API_EP_TEST_FPH_VALIDATE,
MTD_API_EP_TEST_FPH_FEEDBACK,
/* Self Assessment Test Support */
MTD_API_EP_TEST_SATS_DELETE,
/* Self Assessment Test Support Checkpoint for Vendor Data */
MTD_API_EP_TEST_SATS_CHKPT_LIST,
MTD_API_EP_TEST_SATS_CHKPT_CREATE,
MTD_API_EP_TEST_SATS_CHKPT_DELETE,
MTD_API_EP_TEST_SATS_CHKPT_RESTORE,
/* Self Assessment Test Support Business Income Source */
MTD_API_EP_TEST_SATS_BIS_CREATE,
MTD_API_EP_TEST_SATS_BIS_DELETE,
/* Self Assessment Test Support ITSA Status */
MTD_API_EP_TEST_SATS_IS_AMEND,
/* OAuth */
MTD_API_EP_OA_REFRESH_TOKEN,
MTD_API_EP_OA_EXCHANGE_AUTH_CODE,
MTD_API_EP_OA_APPLICATION_TOKEN,
};Used to tell mtd_ep(3) which API endpoint to query.
struct mtd_ep_api_info {
enum mtd_ep_api api;
const char *version;
const char *name;
};Structure as returned by mtd_ep_api_get_info(3) containing information about a particular MTD API.
enum mtd_data_src_type {
MTD_DATA_SRC_FILE = 0,
MTD_DATA_SRC_BUF,
MTD_DATA_SRC_FP,
MTD_DATA_SRC_FD,
};
typedef union mtd_data_src {
const void *buf;
const char *file;
FILE *fp;
int fd;
} mtd_data_src_t;
struct mtd_dsrc_ctx {
mtd_data_src_t data_src;
size_t data_len;
enum mtd_data_src_type src_type;
};These define the source of POST/PUT data for an endpoint.
You define a struct mtd_dsrc_ctx and set data_src to either a buffer that contains the data, a filename of a file containing the data, a stdio FILE pointer or a file descriptor of an already opened file containing the data to send.
You then set src_type to the appropriate enum mtd_data_src_type value.
In the case of using a buffer you also need to set the length in bytes of the data in the buffer via data_len. The length should not include any terminating nul byte.
#define MTD_FPH_SET_FUNC(s, m, f) (s.m = f)#define MTD_FPH_CLI_PUBLIC_IP fph_srcip
#define MTD_FPH_CLI_PUBLIC_PORT fph_srcport
#define MTD_FPH_CLI_DEV_ID fph_device_id
#define MTD_FPH_CLI_USER_ID fph_user
#define MTD_FPH_CLI_TZ fph_tz
#define MTD_FPH_CLI_LOCAL_IPS fph_ipaddrs
#define MTD_FPH_CLI_MAC_ADDRS fph_macaddrs
#define MTD_FPH_CLI_UA fph_ua
#define MTD_FPH_CLI_MULTI_FACTOR fph_multi_factor
#define MTD_FPH_CLI_SCREENS fph_screens
#define MTD_FPH_CLI_WINDOW_SZ fph_window_sz
#define MTD_FPH_CLI_BROWSER_PLUGINS fph_browser_plugins
#define MTD_FPH_CLI_BROWSER_JS_UA fph_browser_js_ua
#define MTD_FPH_CLI_BROWSER_DNT fph_browser_dnt
#define MTD_FPH_CLI_LOCAL_IPS_TS fph_ipaddrs_ts
#define MTD_FPH_CLI_PUBLIC_IP_TS fph_srcip_ts
#define MTD_FPH_VEN_VERSION fph_version
#define MTD_FPH_VEN_VERSION_CLI fph_version_cli
#define MTD_FPH_VEN_LICENSE_ID fph_license_id
#define MTD_FPH_VEN_PUBLIC_IP fph_vendor_ip
#define MTD_FPH_VEN_FWD fph_vendor_fwd
#define MTD_FPH_VEN_PROD_NAME fph_prod_namestruct mtd_fph_ops {
char *(*fph_device_id)(void *user_data);
char *(*fph_user)(void *user_data);
char *(*fph_tz)(void *user_data);
char *(*fph_ipaddrs)(void *user_data);
char *(*fph_ipaddrs_ts)(void *user_data);
char *(*fph_macaddrs)(void *user_data);
char *(*fph_srcip)(void *user_data);
char *(*fph_srcip_ts)(void *user_data);
char *(*fph_srcport)(void *user_data);
char *(*fph_screens)(void *user_data);
char *(*fph_window_sz)(void *user_data);
char *(*fph_browser_plugins)(void *user_data);
char *(*fph_browser_js_ua)(void *user_data);
char *(*fph_browser_dnt)(void *user_data);
char *(*fph_vendor_ip)(void *user_data);
char *(*fph_vendor_fwd)(void *user_data);
char *(*fph_ua)(void *user_data);
char *(*fph_multi_factor)(void *user_data);
char *(*fph_license_id)(void *user_data);
char *(*fph_version)(void *user_data);
char *(*fph_version_cli)(void *user_data);
char *(*fph_prod_name)(void *user_data);
void *user_data;
};This can be used to override the in built functions that generate the various fraud prevention header values. You can set any or all of them, any that are set to NULL will use the appropriate inbuilt function.
These functions should return a pointer to a dynamically allocated buffer that will be free(3)'d by libmtdac.
You should probably take a quick look at the [Fraud Prevention Headers](/README.md#fraud-prevention-headers) section of the [README.md](/README.md) to understand the possible privacy implications.
struct mtd_cfg {
const struct mtd_fph_ops *fph_ops;
const char * const *extra_hdrs;
const char *config_dir;
const FILE *log_fp;
};This is a structure that can be passed into mtd_init(3) to provide/override configuration data.
Firstly, it can be used for overriding the fraud prevention headers. A user could declare a struct mtd_fph_ops and set various members to their own functions then set mtd_cfg.fph_ops to this structure and pass it into mtd_init(3) e.g.
const struct mtd_fph_ops fph_ops = {
.fph_user = my_user,
.fph_version = my_ver
};You also need to specify the directory that libmtdac will use for its config data.
const struct mtd_cfg cfg = {
.fph_ops = &fph_ops,
.config_dir = "/home/foo/.config/my-app"
};
err = mtd_init(flags, &cfg);You can also use the MTD_FPH_SET_FUNC() macro, e.g.
struct mtd_fph_ops fph_ops = {};
const struct mtd_cfg cfg = {
.fph_ops = &fph_ops,
.config_dir = "/home/foo/.config/my-app"
};
MTD_FPH_SET_FUNC(fph_ops, MTD_FPH_CLI_USER_ID, my_user);
MTD_FPH_SET_FUNC(fph_ops, MTD_FPH_VEN_VERSION, my_ver);Finally you can optionally specify an open file-pointer (FILE *) to have
logs sent to rather than stderr/stdout. MTD_LOG_ERROR logs are not
affected by this and still go to stderr.