Initial Commit

This commit is contained in:
David Stone
2024-11-30 18:24:12 -07:00
commit e8f7955c1c
5432 changed files with 1397750 additions and 0 deletions
LICENSE
assets
css
fonts
img
badge.pngbg-setup.png
checkout-forms
empty-state-bg.pngerasmo-carlos.jpg
flags
1x1
ad.svgae.svgaf.svgag.svgai.svgal.svgam.svgao.svgaq.svgar.svgas.svgat.svgau.svgaw.svgax.svgaz.svgba.svgbb.svgbd.svgbe.svgbf.svgbg.svgbh.svgbi.svgbj.svgbl.svgbm.svgbn.svgbo.svgbq.svgbr.svgbs.svgbt.svgbv.svgbw.svgby.svgbz.svgca.svgcc.svgcd.svgcf.svgcg.svgch.svgci.svgck.svgcl.svgcm.svgcn.svgco.svgcr.svgcu.svgcv.svgcw.svgcx.svgcy.svgcz.svgde.svgdj.svgdk.svgdm.svgdo.svgdz.svgec.svgee.svgeg.svgeh.svger.svges-ca.svges-ga.svges.svget.svgeu.svgfi.svgfj.svgfk.svgfm.svgfo.svgfr.svgga.svggb-eng.svggb-nir.svggb-sct.svggb-wls.svggb.svggd.svgge.svggf.svggg.svggh.svggi.svggl.svggm.svggn.svggp.svggq.svggr.svggs.svggt.svggu.svggw.svggy.svghk.svghm.svghn.svghr.svght.svghu.svgid.svgie.svgil.svgim.svgin.svgio.svgiq.svgir.svgis.svgit.svgje.svgjm.svgjo.svgjp.svgke.svgkg.svgkh.svgki.svgkm.svgkn.svgkp.svgkr.svgkw.svgky.svgkz.svgla.svglb.svglc.svgli.svglk.svglr.svgls.svglt.svglu.svglv.svgly.svgma.svgmc.svgmd.svgme.svgmf.svgmg.svgmh.svgmk.svgml.svgmm.svgmn.svgmo.svgmp.svgmq.svgmr.svgms.svgmt.svgmu.svgmv.svgmw.svgmx.svgmy.svgmz.svgna.svgnc.svgne.svgnf.svgng.svgni.svgnl.svgno.svgnp.svgnr.svgnu.svgnz.svgom.svgpa.svgpe.svgpf.svgpg.svgph.svgpk.svgpl.svgpm.svgpn.svgpr.svgps.svgpt.svgpw.svgpy.svgqa.svgre.svgro.svgrs.svgru.svgrw.svgsa.svgsb.svgsc.svgsd.svgse.svgsg.svgsh.svgsi.svgsj.svgsk.svgsl.svgsm.svgsn.svgso.svgsr.svgss.svgst.svgsv.svgsx.svgsy.svgsz.svgtc.svgtd.svgtf.svgtg.svgth.svgtj.svgtk.svgtl.svgtm.svgtn.svgto.svgtr.svgtt.svgtv.svgtw.svgtz.svgua.svgug.svgum.svgun.svgus.svguy.svguz.svgva.svgvc.svgve.svgvg.svgvi.svgvn.svgvu.svgwf.svgws.svgxk.svgye.svgyt.svgza.svgzm.svgzw.svg
4x3
ad.svgae.svgaf.svgag.svgai.svgal.svgam.svgao.svgaq.svgar.svgas.svgat.svgau.svgaw.svgax.svgaz.svgba.svgbb.svgbd.svgbe.svgbf.svgbg.svgbh.svgbi.svgbj.svgbl.svgbm.svgbn.svgbo.svgbq.svgbr.svgbs.svgbt.svgbv.svgbw.svgby.svgbz.svgca.svgcc.svgcd.svgcf.svgcg.svgch.svgci.svgck.svgcl.svgcm.svgcn.svgco.svgcr.svgcu.svgcv.svgcw.svgcx.svgcy.svgcz.svgde.svgdj.svgdk.svgdm.svgdo.svgdz.svgec.svgee.svgeg.svgeh.svger.svges-ca.svges-ga.svges.svget.svgeu.svgfi.svgfj.svgfk.svgfm.svgfo.svgfr.svgga.svggb-eng.svggb-nir.svggb-sct.svggb-wls.svggb.svggd.svgge.svggf.svggg.svggh.svggi.svggl.svggm.svggn.svggp.svggq.svggr.svggs.svggt.svggu.svggw.svggy.svghk.svghm.svghn.svghr.svght.svghu.svgid.svgie.svgil.svgim.svgin.svgio.svgiq.svgir.svgis.svgit.svgje.svgjm.svgjo.svgjp.svgke.svgkg.svgkh.svgki.svgkm.svgkn.svgkp.svgkr.svgkw.svgky.svgkz.svgla.svglb.svglc.svgli.svglk.svglr.svgls.svglt.svglu.svglv.svgly.svgma.svgmc.svgmd.svgme.svgmf.svgmg.svgmh.svgmk.svgml.svgmm.svgmn.svgmo.svgmp.svgmq.svgmr.svgms.svgmt.svgmu.svgmv.svgmw.svgmx.svgmy.svgmz.svgna.svgnc.svgne.svgnf.svgng.svgni.svgnl.svgno.svgnp.svgnr.svgnu.svgnz.svgom.svgpa.svgpe.svgpf.svgpg.svgph.svgpk.svgpl.svgpm.svgpn.svgpr.svgps.svgpt.svgpw.svgpy.svgqa.svgre.svgro.svgrs.svgru.svgrw.svgsa.svgsb.svgsc.svgsd.svgse.svgsg.svgsh.svgsi.svgsj.svgsk.svgsl.svgsm.svgsn.svgso.svgsr.svgss.svgst.svgsv.svgsx.svgsy.svgsz.svgtc.svgtd.svgtf.svgtg.svgth.svgtj.svgtk.svgtl.svgtm.svgtn.svgto.svgtr.svgtt.svgtv.svgtw.svgtz.svgua.svgug.svgum.svgun.svgus.svguy.svguz.svgva.svgvc.svgve.svgvg.svgvi.svgvn.svgvu.svgwf.svgws.svgxk.svgye.svgyt.svgza.svgzm.svgzw.svg
hosts
loader.svglogo.pngno-preview.pngpattern-wp-ultimo.png
settings
sidebar
site-placeholder-image.png
wizards
wp-ultimo-screenshot.png
js
addons.jsaddons.min.jsadmin-notices.jsadmin-notices.min.jsadmin-screen.jsadmin-screen.min.jsadmin.jsadmin.min.jsapp.jsapp.min.jscheckout-form-editor-modal.jscheckout-form-editor-modal.min.jscheckout-forms-editor.jscheckout-forms-editor.min.jscheckout.jscheckout.min.jscookie-helpers.jscookie-helpers.min.jscustomizer.jscustomizer.min.jsdashboard-statistics.jsdashboard-statistics.min.jsedit-placeholders.jsedit-placeholders.min.jsemail-edit-page.jsemail-edit-page.min.jsevent-view-page.jsevent-view-page.min.jsfields.jsfields.min.jsfunctions.jsfunctions.min.js
gateways
gutenberg-support.jsgutenberg-support.min.jsjumper.jsjumper.min.jslegacy-signup.jslegacy-signup.min.js
lib
list-tables.jslist-tables.min.jsscreenshot-scraper.jsscreenshot-scraper.min.jsselectizer.jsselectizer.min.jssetup-wizard-polyfill.jssetup-wizard-polyfill.min.jssetup-wizard.jssetup-wizard.min.jssite-maintenance.jssite-maintenance.min.jssso.jssso.min.jssupport.jssupport.min.jstax-rates.jstax-rates.min.jstax-statistics.jstax-statistics.min.jstemplate-previewer.jstemplate-previewer.min.jstemplate-switching.jstemplate-switching.min.jsthank-you.jsthank-you.min.jstours.jstours.min.jsurl-preview.jsurl-preview.min.jsview-logs.jsview-logs.min.jsvisits-counter.jsvisits-counter.min.jsvue-apps.jsvue-apps.min.jswebhook-list-page.jswebhook-list-page.min.jswebhook-page.jswebhook-page.min.jswubox.jswubox.min.js
autoload.phpconstants.php
data
dependencies
amphp
amp
byte-stream
cache
dns
hpack
http-client
http
parser
process
serialization
socket
sync
windows-registry
autoload.php
berlindb
composer
daverandom
delight-im
doctrine
deprecations
lib
Doctrine
guzzlehttp
guzzle
promises
psr7
hashids
ifsnop
mysqldump-php
src
Ifsnop
Mysqldump
jasny
kelunik
league
mexitek
phpcolors
demo
src
Mexitek
PHPColors
mpdf
mpdf
CREDITS.txt
data
CJKdata.php
collations
Afrikaans_South_Africa.phpAlbanian_Albania.phpAlsatian_France.phpArabic_Algeria.phpArabic_Bahrain.phpArabic_Egypt.phpArabic_Iraq.phpArabic_Jordan.phpArabic_Kuwait.phpArabic_Lebanon.phpArabic_Libya.phpArabic_Morocco.phpArabic_Oman.phpArabic_Pseudo_RTL.phpArabic_Qatar.phpArabic_Saudi_Arabia.phpArabic_Syria.phpArabic_Tunisia.phpArabic_Yemen.phpAzeri_(Cyrillic)_Azerbaijan.phpAzeri_(Latin)_Azerbaijan.phpBashkir_Russia.phpBasque_Spain.phpBelarusian_Belarus.phpBosnian_(Cyrillic)_Bosnia_and_Herzegovina.phpBosnian_(Latin)_Bosnia_and_Herzegovina.phpBreton_France.phpBulgarian_Bulgaria.phpCatalan_Spain.phpCorsican_France.phpCroatian_(Latin)_Bosnia_and_Herzegovina.phpCroatian_Croatia.phpCzech_Czech_Republic.phpDanish_Denmark.phpDari_Afghanistan.phpDutch_Belgium.phpDutch_Netherlands.phpEnglish_Australia.phpEnglish_Belize.phpEnglish_Canada.phpEnglish_Caribbean.phpEnglish_India.phpEnglish_Ireland.phpEnglish_Jamaica.phpEnglish_Malaysia.phpEnglish_New_Zealand.phpEnglish_Republic_of_the_Philippines.phpEnglish_Singapore.phpEnglish_South_Africa.phpEnglish_Trinidad_and_Tobago.phpEnglish_United_Kingdom.phpEnglish_United_States.phpEnglish_Zimbabwe.phpEstonian_Estonia.phpFaroese_Faroe_Islands.phpFilipino_Philippines.phpFinnish_Finland.phpFrench_Belgium.phpFrench_Canada.phpFrench_France.phpFrench_Luxembourg.phpFrench_Principality_of_Monaco.phpFrench_Switzerland.phpFrisian_Netherlands.phpGalician_Spain.phpGerman_Austria.phpGerman_Germany.phpGerman_Liechtenstein.phpGerman_Luxembourg.phpGerman_Switzerland.phpGreek_Greece.phpGreenlandic_Greenland.phpHausa_(Latin)_Nigeria.phpHebrew_Israel.phpHungarian_Hungary.phpIcelandic_Iceland.phpIgbo_Nigeria.phpIndonesian_Indonesia.phpInuktitut_(Latin)_Canada.phpInvariant_Language_Invariant_Country.phpIrish_Ireland.phpItalian_Italy.phpItalian_Switzerland.phpKinyarwanda_Rwanda.phpKiswahili_Kenya.phpKyrgyz_Kyrgyzstan.phpLatvian_Latvia.phpLithuanian_Lithuania.phpLower_Sorbian_Germany.phpLuxembourgish_Luxembourg.phpMacedonian_(FYROM)_Macedonia_(FYROM).phpMalay_Brunei_Darussalam.phpMalay_Malaysia.phpMapudungun_Chile.phpMohawk_Canada.phpMongolian_(Cyrillic)_Mongolia.phpNorwegian_(Nynorsk)_Norway.phpOccitan_France.phpPersian_Iran.phpPolish_Poland.phpPortuguese_Brazil.phpPortuguese_Portugal.phpQuechua_Bolivia.phpQuechua_Ecuador.phpQuechua_Peru.phpRomanian_Romania.phpRomansh_Switzerland.phpRussian_Russia.phpSami_(Inari)_Finland.phpSami_(Lule)_Norway.phpSami_(Lule)_Sweden.phpSami_(Northern)_Finland.phpSami_(Northern)_Norway.phpSami_(Northern)_Sweden.phpSami_(Skolt)_Finland.phpSami_(Southern)_Norway.phpSami_(Southern)_Sweden.phpSerbian_(Cyrillic)_Bosnia_and_Herzegovina.phpSerbian_(Cyrillic)_Serbia.phpSerbian_(Latin)_Bosnia_and_Herzegovina.phpSerbian_(Latin)_Serbia.phpSesotho_sa_Leboa_South_Africa.phpSetswana_South_Africa.phpSlovak_Slovakia.phpSlovenian_Slovenia.phpSpanish_Argentina.phpSpanish_Bolivia.phpSpanish_Chile.phpSpanish_Colombia.phpSpanish_Costa_Rica.phpSpanish_Dominican_Republic.phpSpanish_Ecuador.phpSpanish_El_Salvador.phpSpanish_Guatemala.phpSpanish_Honduras.phpSpanish_Mexico.phpSpanish_Nicaragua.phpSpanish_Panama.phpSpanish_Paraguay.phpSpanish_Peru.phpSpanish_Puerto_Rico.phpSpanish_Spain.phpSpanish_United_States.phpSpanish_Uruguay.phpSpanish_Venezuela.phpSwedish_Finland.phpSwedish_Sweden.phpTajik_(Cyrillic)_Tajikistan.phpTamazight_(Latin)_Algeria.phpTatar_Russia.phpTurkish_Turkey.phpTurkmen_Turkmenistan.phpUkrainian_Ukraine.phpUpper_Sorbian_Germany.phpUrdu_Islamic_Republic_of_Pakistan.phpUzbek_(Cyrillic)_Uzbekistan.phpUzbek_(Latin)_Uzbekistan.phpVietnamese_Vietnam.phpWelsh_United_Kingdom.phpWolof_Senegal.phpYakut_Russia.phpYoruba_Nigeria.phpisiXhosa_South_Africa.phpisiZulu_South_Africa.php
entity_substitutions.php
font
iccprofiles
lang2fonts.csslinebrdictK.datlinebrdictL.datlinebrdictT.datmpdf.cssno_image.jpgout.php
patterns
subs_core.phpsubs_win-1252.phpupperCase.php
phpunit.xmlruleset.xml
src
AssetFetcher.phpBarcode.php
Barcode
Cache.php
Color
Config
Container
Conversion
Css
CssManager.phpDirectWrite.php
Exception
File
Fonts
Form.phpFpdiTrait.php
Gif
Gradient.phpHTMLParserMode.php
Http
Hyphenator.php
Image
Language
Log
Mpdf.phpMpdfException.phpMpdfImageException.phpOtl.phpOtlDump.php
Output
PageBox.phpPageFormat.php
Pdf
ServiceFactory.php
Shaper
SizeConverter.phpStrict.phpTTFontFile.phpTTFontFileAnalysis.phpTableOfContents.phpTag.php
Tag
Ucdn.php
Utils
Watermark.phpWatermarkImage.phpWatermarkText.php
Writer
functions-dev.phpfunctions.php
ttfonts
psr-http-message-shim
psr-log-aware-trait
myclabs
nesbot
carbon
extension.neon
lazy
sponsors.php
src
Carbon
AbstractTranslator.phpCarbon.phpCarbonConverterInterface.phpCarbonImmutable.phpCarbonInterface.phpCarbonInterval.phpCarbonPeriod.phpCarbonPeriodImmutable.phpCarbonTimeZone.php
Cli
Doctrine
Exceptions
Factory.phpFactoryImmutable.php
Lang
aa.phpaa_DJ.phpaa_ER.phpaa_ER@saaho.phpaa_ET.phpaf.phpaf_NA.phpaf_ZA.phpagq.phpagr.phpagr_PE.phpak.phpak_GH.phpam.phpam_ET.phpan.phpan_ES.phpanp.phpanp_IN.phpar.phpar_AE.phpar_BH.phpar_DJ.phpar_DZ.phpar_EG.phpar_EH.phpar_ER.phpar_IL.phpar_IN.phpar_IQ.phpar_JO.phpar_KM.phpar_KW.phpar_LB.phpar_LY.phpar_MA.phpar_MR.phpar_OM.phpar_PS.phpar_QA.phpar_SA.phpar_SD.phpar_SO.phpar_SS.phpar_SY.phpar_Shakl.phpar_TD.phpar_TN.phpar_YE.phpas.phpas_IN.phpasa.phpast.phpast_ES.phpayc.phpayc_PE.phpaz.phpaz_AZ.phpaz_Cyrl.phpaz_IR.phpaz_Latn.phpbas.phpbe.phpbe_BY.phpbe_BY@latin.phpbem.phpbem_ZM.phpber.phpber_DZ.phpber_MA.phpbez.phpbg.phpbg_BG.phpbhb.phpbhb_IN.phpbho.phpbho_IN.phpbi.phpbi_VU.phpbm.phpbn.phpbn_BD.phpbn_IN.phpbo.phpbo_CN.phpbo_IN.phpbr.phpbr_FR.phpbrx.phpbrx_IN.phpbs.phpbs_BA.phpbs_Cyrl.phpbs_Latn.phpbyn.phpbyn_ER.phpca.phpca_AD.phpca_ES.phpca_ES_Valencia.phpca_FR.phpca_IT.phpccp.phpccp_IN.phpce.phpce_RU.phpcgg.phpchr.phpchr_US.phpckb.phpcmn.phpcmn_TW.phpcrh.phpcrh_UA.phpcs.phpcs_CZ.phpcsb.phpcsb_PL.phpcu.phpcv.phpcv_RU.phpcy.phpcy_GB.phpda.phpda_DK.phpda_GL.phpdav.phpde.phpde_AT.phpde_BE.phpde_CH.phpde_DE.phpde_IT.phpde_LI.phpde_LU.phpdje.phpdoi.phpdoi_IN.phpdsb.phpdsb_DE.phpdua.phpdv.phpdv_MV.phpdyo.phpdz.phpdz_BT.phpebu.phpee.phpee_TG.phpel.phpel_CY.phpel_GR.phpen.phpen_001.phpen_150.phpen_AG.phpen_AI.phpen_AS.phpen_AT.phpen_AU.phpen_BB.phpen_BE.phpen_BI.phpen_BM.phpen_BS.phpen_BW.phpen_BZ.phpen_CA.phpen_CC.phpen_CH.phpen_CK.phpen_CM.phpen_CX.phpen_CY.phpen_DE.phpen_DG.phpen_DK.phpen_DM.phpen_ER.phpen_FI.phpen_FJ.phpen_FK.phpen_FM.phpen_GB.phpen_GD.phpen_GG.phpen_GH.phpen_GI.phpen_GM.phpen_GU.phpen_GY.phpen_HK.phpen_IE.phpen_IL.phpen_IM.phpen_IN.phpen_IO.phpen_ISO.phpen_JE.phpen_JM.phpen_KE.phpen_KI.phpen_KN.phpen_KY.phpen_LC.phpen_LR.phpen_LS.phpen_MG.phpen_MH.phpen_MO.phpen_MP.phpen_MS.phpen_MT.phpen_MU.phpen_MW.phpen_MY.phpen_NA.phpen_NF.phpen_NG.phpen_NL.phpen_NR.phpen_NU.phpen_NZ.phpen_PG.phpen_PH.phpen_PK.phpen_PN.phpen_PR.phpen_PW.phpen_RW.phpen_SB.phpen_SC.phpen_SD.phpen_SE.phpen_SG.phpen_SH.phpen_SI.phpen_SL.phpen_SS.phpen_SX.phpen_SZ.phpen_TC.phpen_TK.phpen_TO.phpen_TT.phpen_TV.phpen_TZ.phpen_UG.phpen_UM.phpen_US.phpen_US_Posix.phpen_VC.phpen_VG.phpen_VI.phpen_VU.phpen_WS.phpen_ZA.phpen_ZM.phpen_ZW.phpeo.phpes.phpes_419.phpes_AR.phpes_BO.phpes_BR.phpes_BZ.phpes_CL.phpes_CO.phpes_CR.phpes_CU.phpes_DO.phpes_EA.phpes_EC.phpes_ES.phpes_GQ.phpes_GT.phpes_HN.phpes_IC.phpes_MX.phpes_NI.phpes_PA.phpes_PE.phpes_PH.phpes_PR.phpes_PY.phpes_SV.phpes_US.phpes_UY.phpes_VE.phpet.phpet_EE.phpeu.phpeu_ES.phpewo.phpfa.phpfa_AF.phpfa_IR.phpff.phpff_CM.phpff_GN.phpff_MR.phpff_SN.phpfi.phpfi_FI.phpfil.phpfil_PH.phpfo.phpfo_DK.phpfo_FO.phpfr.phpfr_BE.phpfr_BF.phpfr_BI.phpfr_BJ.phpfr_BL.phpfr_CA.phpfr_CD.phpfr_CF.phpfr_CG.phpfr_CH.phpfr_CI.phpfr_CM.phpfr_DJ.phpfr_DZ.phpfr_FR.phpfr_GA.phpfr_GF.phpfr_GN.phpfr_GP.phpfr_GQ.phpfr_HT.phpfr_KM.phpfr_LU.phpfr_MA.phpfr_MC.phpfr_MF.phpfr_MG.phpfr_ML.phpfr_MQ.phpfr_MR.phpfr_MU.phpfr_NC.phpfr_NE.phpfr_PF.phpfr_PM.phpfr_RE.phpfr_RW.phpfr_SC.phpfr_SN.phpfr_SY.phpfr_TD.phpfr_TG.phpfr_TN.phpfr_VU.phpfr_WF.phpfr_YT.phpfur.phpfur_IT.phpfy.phpfy_DE.phpfy_NL.phpga.phpga_IE.phpgd.phpgd_GB.phpgez.phpgez_ER.phpgez_ET.phpgl.phpgl_ES.phpgom.phpgom_Latn.phpgsw.phpgsw_CH.phpgsw_FR.phpgsw_LI.phpgu.phpgu_IN.phpguz.phpgv.phpgv_GB.phpha.phpha_GH.phpha_NE.phpha_NG.phphak.phphak_TW.phphaw.phphe.phphe_IL.phphi.phphi_IN.phphif.phphif_FJ.phphne.phphne_IN.phphr.phphr_BA.phphr_HR.phphsb.phphsb_DE.phpht.phpht_HT.phphu.phphu_HU.phphy.phphy_AM.phpi18n.phpia.phpia_FR.phpid.phpid_ID.phpig.phpig_NG.phpii.phpik.phpik_CA.phpin.phpis.phpis_IS.phpit.phpit_CH.phpit_IT.phpit_SM.phpit_VA.phpiu.phpiu_CA.phpiw.phpja.phpja_JP.phpjgo.phpjmc.phpjv.phpka.phpka_GE.phpkab.phpkab_DZ.phpkam.phpkde.phpkea.phpkhq.phpki.phpkk.phpkk_KZ.phpkkj.phpkl.phpkl_GL.phpkln.phpkm.phpkm_KH.phpkn.phpkn_IN.phpko.phpko_KP.phpko_KR.phpkok.phpkok_IN.phpks.phpks_IN.phpks_IN@devanagari.phpksb.phpksf.phpksh.phpku.phpku_TR.phpkw.phpkw_GB.phpky.phpky_KG.phplag.phplb.phplb_LU.phplg.phplg_UG.phpli.phpli_NL.phplij.phplij_IT.phplkt.phpln.phpln_AO.phpln_CD.phpln_CF.phpln_CG.phplo.phplo_LA.phplrc.phplrc_IQ.phplt.phplt_LT.phplu.phpluo.phpluy.phplv.phplv_LV.phplzh.phplzh_TW.phpmag.phpmag_IN.phpmai.phpmai_IN.phpmas.phpmas_TZ.phpmer.phpmfe.phpmfe_MU.phpmg.phpmg_MG.phpmgh.phpmgo.phpmhr.phpmhr_RU.phpmi.phpmi_NZ.phpmiq.phpmiq_NI.phpmjw.phpmjw_IN.phpmk.phpmk_MK.phpml.phpml_IN.phpmn.phpmn_MN.phpmni.phpmni_IN.phpmo.phpmr.phpmr_IN.phpms.phpms_BN.phpms_MY.phpms_SG.phpmt.phpmt_MT.phpmua.phpmy.phpmy_MM.phpmzn.phpnan.phpnan_TW.phpnan_TW@latin.phpnaq.phpnb.phpnb_NO.phpnb_SJ.phpnd.phpnds.phpnds_DE.phpnds_NL.phpne.phpne_IN.phpne_NP.phpnhn.phpnhn_MX.phpniu.phpniu_NU.phpnl.phpnl_AW.phpnl_BE.phpnl_BQ.phpnl_CW.phpnl_NL.phpnl_SR.phpnl_SX.phpnmg.phpnn.phpnn_NO.phpnnh.phpno.phpnr.phpnr_ZA.phpnso.phpnso_ZA.phpnus.phpnyn.phpoc.phpoc_FR.phpom.phpom_ET.phpom_KE.phpor.phpor_IN.phpos.phpos_RU.phppa.phppa_Arab.phppa_Guru.phppa_IN.phppa_PK.phppap.phppap_AW.phppap_CW.phppl.phppl_PL.phpprg.phpps.phpps_AF.phppt.phppt_AO.phppt_BR.phppt_CH.phppt_CV.phppt_GQ.phppt_GW.phppt_LU.phppt_MO.phppt_MZ.phppt_PT.phppt_ST.phppt_TL.phpqu.phpqu_BO.phpqu_EC.phpquz.phpquz_PE.phpraj.phpraj_IN.phprm.phprn.phpro.phpro_MD.phpro_RO.phprof.phpru.phpru_BY.phpru_KG.phpru_KZ.phpru_MD.phpru_RU.phpru_UA.phprw.phprw_RW.phprwk.phpsa.phpsa_IN.phpsah.phpsah_RU.phpsaq.phpsat.phpsat_IN.phpsbp.phpsc.phpsc_IT.phpsd.phpsd_IN.phpsd_IN@devanagari.phpse.phpse_FI.phpse_NO.phpse_SE.phpseh.phpses.phpsg.phpsgs.phpsgs_LT.phpsh.phpshi.phpshi_Latn.phpshi_Tfng.phpshn.phpshn_MM.phpshs.phpshs_CA.phpsi.phpsi_LK.phpsid.phpsid_ET.phpsk.phpsk_SK.phpsl.phpsl_SI.phpsm.phpsm_WS.phpsmn.phpsn.phpso.phpso_DJ.phpso_ET.phpso_KE.phpso_SO.phpsq.phpsq_AL.phpsq_MK.phpsq_XK.phpsr.phpsr_Cyrl.phpsr_Cyrl_BA.phpsr_Cyrl_ME.phpsr_Cyrl_XK.phpsr_Latn.phpsr_Latn_BA.phpsr_Latn_ME.phpsr_Latn_XK.phpsr_ME.phpsr_RS.phpsr_RS@latin.phpss.phpss_ZA.phpst.phpst_ZA.phpsv.phpsv_AX.phpsv_FI.phpsv_SE.phpsw.phpsw_CD.phpsw_KE.phpsw_TZ.phpsw_UG.phpszl.phpszl_PL.phpta.phpta_IN.phpta_LK.phpta_MY.phpta_SG.phptcy.phptcy_IN.phpte.phpte_IN.phpteo.phpteo_KE.phptet.phptg.phptg_TJ.phpth.phpth_TH.phpthe.phpthe_NP.phpti.phpti_ER.phpti_ET.phptig.phptig_ER.phptk.phptk_TM.phptl.phptl_PH.phptlh.phptn.phptn_ZA.phpto.phpto_TO.phptpi.phptpi_PG.phptr.phptr_CY.phptr_TR.phpts.phpts_ZA.phptt.phptt_RU.phptt_RU@iqtelif.phptwq.phptzl.phptzm.phptzm_Latn.phpug.phpug_CN.phpuk.phpuk_UA.phpunm.phpunm_US.phpur.phpur_IN.phpur_PK.phpuz.phpuz_Arab.phpuz_Cyrl.phpuz_Latn.phpuz_UZ.phpuz_UZ@cyrillic.phpvai.phpvai_Latn.phpvai_Vaii.phpve.phpve_ZA.phpvi.phpvi_VN.phpvo.phpvun.phpwa.phpwa_BE.phpwae.phpwae_CH.phpwal.phpwal_ET.phpwo.phpwo_SN.phpxh.phpxh_ZA.phpxog.phpyav.phpyi.phpyi_US.phpyo.phpyo_BJ.phpyo_NG.phpyue.phpyue_HK.phpyue_Hans.phpyue_Hant.phpyuw.phpyuw_PG.phpzgh.phpzh.phpzh_CN.phpzh_HK.phpzh_Hans.phpzh_Hans_HK.phpzh_Hans_MO.phpzh_Hans_SG.phpzh_Hant.phpzh_Hant_HK.phpzh_Hant_MO.phpzh_Hant_TW.phpzh_MO.phpzh_SG.phpzh_TW.phpzh_YUE.phpzu.phpzu_ZA.php
Laravel
List
MessageFormatter
PHPStan
Traits
Translator.phpTranslatorImmutable.phpTranslatorStrongTypeInterface.php
nyholm
pablo-sg-pacheco
paragonie
phpdocumentor
reflection-common
reflection-docblock
type-resolver
phpseclib
bcmath_compat
phpseclib
AUTHORS
phpseclib
Common
Functions
Crypt
AES.phpBlowfish.phpChaCha20.php
Common
DES.phpDH.php
DH
DSA.php
DSA
EC.php
EC
Hash.phpPublicKeyLoader.phpRC2.phpRC4.phpRSA.php
RSA
Random.phpRijndael.phpSalsa20.phpTripleDES.phpTwofish.php
Exception
File
ANSI.phpASN1.php
ASN1
Element.php
Maps
AccessDescription.phpAdministrationDomainName.phpAlgorithmIdentifier.phpAnotherName.phpAttribute.phpAttributeType.phpAttributeTypeAndValue.phpAttributeValue.phpAttributes.phpAuthorityInfoAccessSyntax.phpAuthorityKeyIdentifier.phpBaseDistance.phpBasicConstraints.phpBuiltInDomainDefinedAttribute.phpBuiltInDomainDefinedAttributes.phpBuiltInStandardAttributes.phpCPSuri.phpCRLDistributionPoints.phpCRLNumber.phpCRLReason.phpCertPolicyId.phpCertificate.phpCertificateIssuer.phpCertificateList.phpCertificatePolicies.phpCertificateSerialNumber.phpCertificationRequest.phpCertificationRequestInfo.phpCharacteristic_two.phpCountryName.phpCurve.phpDHParameter.phpDSAParams.phpDSAPrivateKey.phpDSAPublicKey.phpDigestInfo.phpDirectoryString.phpDisplayText.phpDistributionPoint.phpDistributionPointName.phpDssSigValue.phpECParameters.phpECPoint.phpECPrivateKey.phpEDIPartyName.phpEcdsaSigValue.phpEncryptedData.phpEncryptedPrivateKeyInfo.phpExtKeyUsageSyntax.phpExtension.phpExtensionAttribute.phpExtensionAttributes.phpExtensions.phpFieldElement.phpFieldID.phpGeneralName.phpGeneralNames.phpGeneralSubtree.phpGeneralSubtrees.phpHashAlgorithm.phpHoldInstructionCode.phpInvalidityDate.phpIssuerAltName.phpIssuingDistributionPoint.phpKeyIdentifier.phpKeyPurposeId.phpKeyUsage.phpMaskGenAlgorithm.phpName.phpNameConstraints.phpNetworkAddress.phpNoticeReference.phpNumericUserIdentifier.phpORAddress.phpOneAsymmetricKey.phpOrganizationName.phpOrganizationalUnitNames.phpOtherPrimeInfo.phpOtherPrimeInfos.phpPBEParameter.phpPBES2params.phpPBKDF2params.phpPBMAC1params.phpPKCS9String.phpPentanomial.phpPersonalName.phpPolicyInformation.phpPolicyMappings.phpPolicyQualifierId.phpPolicyQualifierInfo.phpPostalAddress.phpPrime_p.phpPrivateDomainName.phpPrivateKey.phpPrivateKeyInfo.phpPrivateKeyUsagePeriod.phpPublicKey.phpPublicKeyAndChallenge.phpPublicKeyInfo.phpRC2CBCParameter.phpRDNSequence.phpRSAPrivateKey.phpRSAPublicKey.phpRSASSA_PSS_params.phpReasonFlags.phpRelativeDistinguishedName.phpRevokedCertificate.phpSignedPublicKeyAndChallenge.phpSpecifiedECDomain.phpSubjectAltName.phpSubjectDirectoryAttributes.phpSubjectInfoAccessSyntax.phpSubjectPublicKeyInfo.phpTBSCertList.phpTBSCertificate.phpTerminalIdentifier.phpTime.phpTrinomial.phpUniqueIdentifier.phpUserNotice.phpValidity.phpnetscape_ca_policy_url.phpnetscape_cert_type.phpnetscape_comment.php
X509.php
Math
Net
System
bootstrap.phpopenssl.cnf
phpstan
phpdoc-parser
phpstan-baseline.neon
src
Ast
AbstractNodeVisitor.phpAttribute.php
ConstExpr
Node.phpNodeAttributes.phpNodeTraverser.phpNodeVisitor.php
NodeVisitor
PhpDoc
Type
Lexer
Parser
Printer
psr
rakit
ralouphie
getallheaders
remotelyliving
rpnzl
scoper-autoload.php
scssphp
setasign
spatie
stripe
stripe-php
OPENAPI_VERSIONVERSION
data
init.php
lib
Account.phpAccountLink.php
ApiOperations
ApiRequestor.phpApiResource.phpApiResponse.phpApplePayDomain.phpApplicationFee.phpApplicationFeeRefund.php
Apps
Balance.phpBalanceTransaction.phpBankAccount.phpBaseStripeClient.phpBaseStripeClientInterface.php
BillingPortal
Capability.phpCard.phpCashBalance.phpCharge.php
Checkout
Collection.phpCountrySpec.phpCoupon.phpCreditNote.phpCreditNoteLineItem.phpCustomer.phpCustomerBalanceTransaction.phpCustomerCashBalanceTransaction.phpDiscount.phpDispute.phpEphemeralKey.phpErrorObject.phpEvent.php
Exception
ExchangeRate.phpFile.phpFileLink.php
FinancialConnections
FundingInstructions.php
HttpClient
Identity
Invoice.phpInvoiceItem.phpInvoiceLineItem.php
Issuing
LineItem.phpLoginLink.phpMandate.phpOAuth.phpOAuthErrorObject.phpPaymentIntent.phpPaymentLink.phpPaymentMethod.phpPayout.phpPerson.phpPlan.phpPrice.phpProduct.phpPromotionCode.phpQuote.php
Radar
RecipientTransfer.phpRefund.php
Reporting
RequestTelemetry.phpReview.phpSearchResult.php
Service
AbstractService.phpAbstractServiceFactory.phpAccountLinkService.phpAccountService.phpApplePayDomainService.phpApplicationFeeService.php
Apps
BalanceService.phpBalanceTransactionService.php
BillingPortal
ChargeService.php
Checkout
CoreServiceFactory.phpCountrySpecService.phpCouponService.phpCreditNoteService.phpCustomerService.phpDisputeService.phpEphemeralKeyService.phpEventService.phpExchangeRateService.phpFileLinkService.phpFileService.php
FinancialConnections
Identity
InvoiceItemService.phpInvoiceService.php
Issuing
MandateService.phpOAuthService.phpPaymentIntentService.phpPaymentLinkService.phpPaymentMethodService.phpPayoutService.phpPlanService.phpPriceService.phpProductService.phpPromotionCodeService.phpQuoteService.php
Radar
RefundService.php
Reporting
ReviewService.phpSetupAttemptService.phpSetupIntentService.phpShippingRateService.php
Sigma
SourceService.phpSubscriptionItemService.phpSubscriptionScheduleService.phpSubscriptionService.php
Tax
TaxCodeService.phpTaxRateService.php
Terminal
TestHelpers
TokenService.phpTopupService.phpTransferService.php
Treasury
WebhookEndpointService.php
SetupAttempt.phpSetupIntent.phpShippingRate.php
Sigma
SingletonApiResource.phpSource.phpSourceTransaction.phpStripe.phpStripeClient.phpStripeClientInterface.phpStripeObject.phpStripeStreamingClientInterface.phpSubscription.phpSubscriptionItem.phpSubscriptionSchedule.php
Tax
TaxCode.phpTaxId.phpTaxRate.php
Terminal
TestHelpers
Token.phpTopup.phpTransfer.phpTransferReversal.php
Treasury
UsageRecord.phpUsageRecordSummary.php
Util
Webhook.phpWebhookEndpoint.phpWebhookSignature.php
symfony
cache-contracts
cache
deprecation-contracts
event-dispatcher-contracts
event-dispatcher
polyfill-mbstring
polyfill-php73
polyfill-php80
polyfill-php81
process
service-contracts
translation-contracts
translation
Catalogue
CatalogueMetadataAwareInterface.php
Command
DataCollector
DataCollectorTranslator.php
DependencyInjection
Dumper
Exception
Extractor
Formatter
IdentityTranslator.php
Loader
LocaleSwitcher.phpLoggingTranslator.phpMessageCatalogue.phpMessageCatalogueInterface.phpMetadataAwareInterface.php
Provider
PseudoLocalizationTranslator.php
Reader
Resources
Test
TranslatableMessage.phpTranslator.phpTranslatorBag.phpTranslatorBagInterface.php
Util
Writer
var-exporter
webmozart
woocommerce
action-scheduler
action-scheduler.php
classes
ActionScheduler_ActionClaim.phpActionScheduler_ActionFactory.phpActionScheduler_AdminView.phpActionScheduler_AsyncRequest_QueueRunner.phpActionScheduler_Compatibility.phpActionScheduler_DataController.phpActionScheduler_DateTime.phpActionScheduler_Exception.phpActionScheduler_FatalErrorMonitor.phpActionScheduler_InvalidActionException.phpActionScheduler_ListTable.phpActionScheduler_LogEntry.phpActionScheduler_NullLogEntry.phpActionScheduler_OptionLock.phpActionScheduler_QueueCleaner.phpActionScheduler_QueueRunner.phpActionScheduler_Versions.phpActionScheduler_WPCommentCleaner.phpActionScheduler_wcSystemStatus.php
WP_CLI
abstracts
actions
data-stores
migration
schedules
schema
deprecated
functions.php
lib
yahnis-elsts
inc
admin-pages
class-about-admin-page.phpclass-addons-admin-page.phpclass-base-admin-page.phpclass-base-customer-facing-admin-page.phpclass-broadcast-edit-admin-page.phpclass-broadcast-list-admin-page.phpclass-checkout-form-edit-admin-page.phpclass-checkout-form-list-admin-page.phpclass-customer-edit-admin-page.phpclass-customer-list-admin-page.phpclass-customizer-admin-page.phpclass-dashboard-admin-page.phpclass-discount-code-edit-admin-page.phpclass-discount-code-list-admin-page.phpclass-domain-edit-admin-page.phpclass-domain-list-admin-page.phpclass-edit-admin-page.phpclass-email-edit-admin-page.phpclass-email-list-admin-page.phpclass-email-template-customize-admin-page.phpclass-event-list-admin-page.phpclass-event-view-admin-page.phpclass-hosting-integration-wizard-admin-page.phpclass-invoice-template-customize-admin-page.phpclass-jobs-list-admin-page.phpclass-list-admin-page.phpclass-membership-edit-admin-page.phpclass-membership-list-admin-page.phpclass-migration-alert-admin-page.phpclass-payment-edit-admin-page.phpclass-payment-list-admin-page.phpclass-placeholders-admin-page.phpclass-product-edit-admin-page.phpclass-product-list-admin-page.phpclass-rollback-admin-page.phpclass-settings-admin-page.phpclass-setup-wizard-admin-page.phpclass-shortcodes-admin-page.phpclass-site-edit-admin-page.phpclass-site-list-admin-page.phpclass-system-info-admin-page.phpclass-tax-rates-admin-page.phpclass-template-previewer-customize-admin-page.phpclass-top-admin-nav-menu.phpclass-view-logs-admin-page.phpclass-webhook-edit-admin-page.phpclass-webhook-list-admin-page.phpclass-wizard-admin-page.php
customer-panel
debug
api
builders
checkout
class-cart.phpclass-checkout-pages.phpclass-checkout.phpclass-legacy-checkout.phpclass-line-item.php
signup-fields
class-admin-notices.phpclass-admin-themes-compatibility.phpclass-ajax.phpclass-api.phpclass-async-calls.phpclass-autoloader.phpclass-core-updates.phpclass-cron.phpclass-current.phpclass-dashboard-statistics.phpclass-dashboard-widgets.phpclass-documentation.phpclass-domain-mapping.phpclass-faker.phpclass-geolocation.phpclass-helper.phpclass-hooks.phpclass-license.phpclass-light-ajax.phpclass-logger.phpclass-maintenance-mode.phpclass-requirements.phpclass-scripts.phpclass-session-cookie.phpclass-settings.phpclass-sunrise.phpclass-unsupported.phpclass-user-switching.phpclass-views.phpclass-whitelabel.phpclass-wp-ultimo.php
compat
contracts
country
br
ca
class-country-br.phpclass-country-ca.phpclass-country-cn.phpclass-country-de.phpclass-country-default.phpclass-country-es.phpclass-country-fr.phpclass-country-gb.phpclass-country-in.phpclass-country-jp.phpclass-country-mx.phpclass-country-my.phpclass-country-ne.phpclass-country-nl.phpclass-country-ru.phpclass-country-sg.phpclass-country-tr.phpclass-country-us.phpclass-country-za.phpclass-country.php
cn
de
es
fr
gb
in
jp
mx
my
ne
nl
ru
sg
tr
us
za
database
debug
deprecated
development
domain-mapping
duplication
exception
functions
gateways
helpers
installers
integrations
internal
invoices
limitations
limits
list-tables
loaders
managers
mercator
models
next
objects
rollback
site-templates
sso
tax
traits
ui
updater
lang
loco.xmlreadme.txtsunrise.phpuninstall.php
views
about.phpadmin-notices.php
admin-pages
base
broadcast
checkout
classes.php
customers
dashboard-statistics
dashboard-widgets
domain
dynamic-styles
email
emails
events
invoice
legacy
limitations
memberships
payments
phpcs.xml
rollback
settings
shortcodes
sites
system-info
taxes
ui
wizards
wp-multisite-waas.php

@ -0,0 +1,39 @@
<?php
declare (strict_types=1);
/**
* Represents a DNS question record
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\TypeFactory;
/**
* Represents a DNS question record
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class Question extends Record
{
/**
* Constructor
*
* @param \LibDNS\Records\Types\TypeFactory $typeFactory
* @param int $type Resource type being requested, can be indicated using the ResourceQTypes enum
*/
public function __construct(TypeFactory $typeFactory, int $type)
{
$this->typeFactory = $typeFactory;
$this->type = $type;
}
}

@ -0,0 +1,38 @@
<?php
declare (strict_types=1);
/**
* Creates Question objects
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\TypeFactory;
/**
* Creates Question objects
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class QuestionFactory
{
/**
* Create a new Question object
*
* @param int $type The resource type
* @return \LibDNS\Records\Question
*/
public function create(int $type) : Question
{
return new Question(new TypeFactory(), $type);
}
}

@ -0,0 +1,138 @@
<?php
declare (strict_types=1);
/**
* Represents the RDATA section of a resource record
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Type;
use WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions\TypeDefinition;
/**
* Represents a data type comprising multiple simple types
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class RData implements \IteratorAggregate, \Countable
{
/**
* @var \LibDNS\Records\Types\Type[] The items that make up the complex type
*/
private $fields = [];
/**
* @var \LibDNS\Records\TypeDefinitions\TypeDefinition Structural definition of the fields
*/
private $typeDef;
/**
* Constructor
*
* @param \LibDNS\Records\TypeDefinitions\TypeDefinition $typeDef
*/
public function __construct(TypeDefinition $typeDef)
{
$this->typeDef = $typeDef;
}
/**
* Magic method for type coersion to string
*
* @return string
*/
public function __toString()
{
if ($handler = $this->typeDef->getToStringFunction()) {
$result = \call_user_func_array($handler, $this->fields);
} else {
$result = \implode(',', $this->fields);
}
return $result;
}
/**
* Get the field indicated by the supplied index
*
* @param int $index
* @return \LibDNS\Records\Types\Type
* @throws \OutOfBoundsException When the supplied index does not refer to a valid field
*/
public function getField(int $index)
{
if (!isset($this->fields[$index])) {
throw new \OutOfBoundsException('Index ' . $index . ' does not refer to a valid field');
}
return $this->fields[$index];
}
/**
* Set the field indicated by the supplied index
*
* @param int $index
* @param \LibDNS\Records\Types\Type $value
* @throws \InvalidArgumentException When the supplied index/value pair does not match the type definition
*/
public function setField(int $index, Type $value)
{
if (!$this->typeDef->getFieldDefinition($index)->assertDataValid($value)) {
throw new \InvalidArgumentException('The supplied value is not valid for the specified index');
}
$this->fields[$index] = $value;
}
/**
* Get the field indicated by the supplied name
*
* @param string $name
* @return \LibDNS\Records\Types\Type
* @throws \OutOfBoundsException When the supplied name does not refer to a valid field
*/
public function getFieldByName(string $name) : Type
{
return $this->getField($this->typeDef->getFieldIndexByName($name));
}
/**
* Set the field indicated by the supplied name
*
* @param string $name
* @param \LibDNS\Records\Types\Type $value
* @throws \OutOfBoundsException When the supplied name does not refer to a valid field
* @throws \InvalidArgumentException When the supplied value does not match the type definition
*/
public function setFieldByName(string $name, Type $value)
{
$this->setField($this->typeDef->getFieldIndexByName($name), $value);
}
/**
* Get the structural definition of the fields
*
* @return \LibDNS\Records\TypeDefinitions\TypeDefinition
*/
public function getTypeDefinition() : TypeDefinition
{
return $this->typeDef;
}
/**
* Retrieve an iterator (IteratorAggregate interface)
*
* @return \Iterator
*/
public function getIterator() : \Iterator
{
return new \ArrayIterator($this->fields);
}
/**
* Get the number of fields (Countable interface)
*
* @return int
*/
public function count() : int
{
return \count($this->fields);
}
}

@ -0,0 +1,62 @@
<?php
declare (strict_types=1);
/**
* Builds RData objects from a type definition
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions\TypeDefinition;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\TypeBuilder;
/**
* Creates RData objects
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class RDataBuilder
{
/**
* @var \LibDNS\Records\RDataFactory
*/
private $rDataFactory;
/**
* @var \LibDNS\Records\Types\TypeBuilder
*/
private $typeBuilder;
/**
* Constructor
*
* @param \LibDNS\Records\RDataFactory $rDataFactory
* @param \LibDNS\Records\Types\TypeBuilder $typeBuilder
*/
public function __construct(RDataFactory $rDataFactory, TypeBuilder $typeBuilder)
{
$this->rDataFactory = $rDataFactory;
$this->typeBuilder = $typeBuilder;
}
/**
* Create a new RData object
*
* @param \LibDNS\Records\TypeDefinitions\TypeDefinition $typeDefinition
* @return \LibDNS\Records\RData
*/
public function build(TypeDefinition $typeDefinition) : RData
{
$rData = $this->rDataFactory->create($typeDefinition);
foreach ($typeDefinition as $index => $type) {
$rData->setField($index, $this->typeBuilder->build($type->getType()));
}
return $rData;
}
}

@ -0,0 +1,38 @@
<?php
declare (strict_types=1);
/**
* Creates RData objects
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions\TypeDefinition;
/**
* Creates RData objects
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class RDataFactory
{
/**
* Create a new RData object
*
* @param \LibDNS\Records\TypeDefinitions\TypeDefinition $typeDefinition
* @return \LibDNS\Records\RData
*/
public function create(TypeDefinition $typeDefinition) : RData
{
return new RData($typeDefinition);
}
}

@ -0,0 +1,97 @@
<?php
declare (strict_types=1);
/**
* Represents a DNS record
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\DomainName;
/**
* Represents a DNS record
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
abstract class Record
{
/**
* @var \LibDNS\Records\Types\TypeFactory
*/
protected $typeFactory;
/**
* @var \LibDNS\Records\Types\DomainName
*/
protected $name;
/**
* @var int
*/
protected $type;
/**
* @var int
*/
protected $class = ResourceClasses::IN;
/**
* Get the value of the record name field
*
* @return \LibDNS\Records\Types\DomainName
*/
public function getName() : DomainName
{
return $this->name;
}
/**
* Set the value of the record name field
*
* @param string|\LibDNS\Records\Types\DomainName $name
* @throws \UnexpectedValueException When the supplied value is not a valid domain name
*/
public function setName($name)
{
if (!$name instanceof DomainName) {
$name = $this->typeFactory->createDomainName((string) $name);
}
$this->name = $name;
}
/**
* Get the value of the record type field
*
* @return int
*/
public function getType() : int
{
return $this->type;
}
/**
* Get the value of the record class field
*
* @return int
*/
public function getClass() : int
{
return $this->class;
}
/**
* Set the value of the record class field
*
* @param int $class The new value, can be indicated using the ResourceClasses/ResourceQClasses enums
* @throws \RangeException When the supplied value is outside the valid range 0 - 65535
*/
public function setClass(int $class)
{
if ($class < 0 || $class > 65535) {
throw new \RangeException('Record class must be in the range 0 - 65535');
}
$this->class = $class;
}
}

@ -0,0 +1,219 @@
<?php
declare (strict_types=1);
/**
* Collection of Record objects
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
/**
* Collection of Record objects
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class RecordCollection implements \IteratorAggregate, \Countable
{
/**
* @var \LibDNS\Records\Record[] List of records held in the collection
*/
private $records = [];
/**
* @var \LibDNS\Records\Record[][] Map of Records in the collection grouped by record name
*/
private $nameMap = [];
/**
* @var int Number of Records in the collection
*/
private $length = 0;
/**
* @var int Whether the collection holds question or resource records
*/
private $type;
/**
* Constructor
*
* @param int $type Can be indicated using the RecordTypes enum
* @throws \InvalidArgumentException When the specified record type is invalid
*/
public function __construct($type)
{
if ($type !== RecordTypes::QUESTION && $type !== RecordTypes::RESOURCE) {
throw new \InvalidArgumentException('Record type must be QUESTION or RESOURCE');
}
$this->type = $type;
}
/**
* Add a record to the correct bucket in the name map
*
* @param \LibDNS\Records\Record $record The record to add
*/
private function addToNameMap(Record $record)
{
if (!isset($this->nameMap[$name = (string) $record->getName()])) {
$this->nameMap[$name] = [];
}
$this->nameMap[$name][] = $record;
}
/**
* Remove a record from the name map
*
* @param \LibDNS\Records\Record $record The record to remove
*/
private function removeFromNameMap(Record $record)
{
if (!empty($this->nameMap[$name = (string) $record->getName()])) {
foreach ($this->nameMap[$name] as $key => $item) {
if ($item === $record) {
\array_splice($this->nameMap[$name], $key, 1);
break;
}
}
}
if (empty($this->nameMap[$name])) {
unset($this->nameMap[$name]);
}
}
/**
* Add a record to the collection
*
* @param \LibDNS\Records\Record $record The record to add
* @throws \InvalidArgumentException When the wrong record type is supplied
*/
public function add(Record $record)
{
if ($this->type === RecordTypes::QUESTION && !$record instanceof Question || $this->type === RecordTypes::RESOURCE && !$record instanceof Resource) {
throw new \InvalidArgumentException('Incorrect record type for this collection');
}
$this->records[] = $record;
$this->addToNameMap($record);
$this->length++;
}
/**
* Remove a record from the collection
*
* @param \LibDNS\Records\Record $record The record to remove
*/
public function remove(Record $record)
{
foreach ($this->records as $key => $item) {
if ($item === $record) {
\array_splice($this->records, $key, 1);
$this->removeFromNameMap($record);
$this->length--;
return;
}
}
throw new \InvalidArgumentException('The supplied record is not a member of this collection');
}
/**
* Test whether the collection contains a specific record
*
* @param \LibDNS\Records\Record $record The record to search for
* @param bool $sameInstance Whether to perform strict comparisons in search
* @return bool
*/
public function contains(Record $record, bool $sameInstance = \false) : bool
{
return \in_array($record, $this->records, $sameInstance);
}
/**
* Get all records in the collection that refer to the specified name
*
* @param string $name The name to match records against
* @return \LibDNS\Records\Record[]
*/
public function getRecordsByName(string $name) : array
{
return $this->nameMap[\strtolower($name)] ?? [];
}
/**
* Get a record from the collection by index
*
* @param int $index Record index
* @return \LibDNS\Records\Record
* @throws \OutOfBoundsException When the supplied index does not refer to a valid record
*/
public function getRecordByIndex(int $index) : Record
{
if (isset($this->records[$index])) {
return $this->records[$index];
}
throw new \OutOfBoundsException('The specified index ' . $index . ' does not exist in the collection');
}
/**
* Remove all records in the collection that refer to the specified name
*
* @param string $name The name to match records against
* @return int The number of records removed
*/
public function clearRecordsByName(string $name) : int
{
$count = 0;
if (isset($this->nameMap[$name = \strtolower($name)])) {
unset($this->nameMap[$name]);
foreach ($this->records as $index => $record) {
if ($record->getName() === $name) {
unset($this->records[$index]);
$count++;
}
}
$this->records = \array_values($this->records);
}
return $count;
}
/**
* Remove all records from the collection
*/
public function clear()
{
$this->records = $this->nameMap = [];
$this->length = 0;
}
/**
* Get a list of all names referenced by records in the collection
*
* @return string[]
*/
public function getNames() : array
{
return \array_keys($this->nameMap);
}
/**
* Get whether the collection holds question or resource records
*
* @return int
*/
public function getType() : int
{
return $this->type;
}
/**
* Retrieve an iterator (IteratorAggregate interface)
*
* @return \Iterator
*/
public function getIterator() : \Iterator
{
return new \ArrayIterator($this->records);
}
/**
* Get the number of records in the collection (Countable interface)
*
* @return int
*/
public function count() : int
{
return $this->length;
}
}

@ -0,0 +1,38 @@
<?php
declare (strict_types=1);
/**
* Creates RecordCollection objects
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
/**
* Creates RecordCollection objects
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class RecordCollectionFactory
{
/**
* Create a new RecordCollection object
*
* @param int $type Can be indicated using the RecordTypes enum
* @return \LibDNS\Records\RecordCollection
* @throws \InvalidArgumentException When the specified record type is invalid
*/
public function create(int $type) : RecordCollection
{
return new RecordCollection($type);
}
}

@ -0,0 +1,30 @@
<?php
declare (strict_types=1);
/**
* Enumeration of possible record types
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Enumeration;
/**
* Enumeration of possible record types
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
final class RecordTypes extends Enumeration
{
const QUESTION = 0;
const RESOURCE = 1;
}

@ -0,0 +1,80 @@
<?php
declare (strict_types=1);
/**
* Represents a DNS resource record
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\TypeFactory;
/**
* Represents a DNS resource record
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class Resource extends Record
{
/**
* @var int Value of the resource's time-to-live property
*/
private $ttl;
/**
* @var \LibDNS\Records\RData
*/
private $data;
/**
* Constructor
*
* @param \LibDNS\Records\Types\TypeFactory $typeFactory
* @param int $type Can be indicated using the ResourceTypes enum
* @param \LibDNS\Records\RData $data
*/
public function __construct(TypeFactory $typeFactory, int $type, RData $data)
{
$this->typeFactory = $typeFactory;
$this->type = $type;
$this->data = $data;
}
/**
* Get the value of the record TTL field
*
* @return int
*/
public function getTTL() : int
{
return $this->ttl;
}
/**
* Set the value of the record TTL field
*
* @param int $ttl The new value
* @throws \RangeException When the supplied value is outside the valid range 0 - 4294967296
*/
public function setTTL(int $ttl)
{
if ($ttl < 0 || $ttl > 4294967296) {
throw new \RangeException('Record class must be in the range 0 - 4294967296');
}
$this->ttl = $ttl;
}
/**
* Get the value of the resource data field
*
* @return \LibDNS\Records\RData
*/
public function getData() : RData
{
return $this->data;
}
}

@ -0,0 +1,65 @@
<?php
declare (strict_types=1);
/**
* Builds Resource objects of a specific type
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions\TypeDefinitionManager;
/**
* Builds Resource objects of a specific type
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class ResourceBuilder
{
/**
* @var \LibDNS\Records\ResourceFactory
*/
private $resourceFactory;
/**
* @var \LibDNS\Records\RDataBuilder
*/
private $rDataBuilder;
/**
* @var \LibDNS\Records\TypeDefinitions\TypeDefinitionManager
*/
private $typeDefinitionManager;
/**
* Constructor
*
* @param \LibDNS\Records\ResourceFactory $resourceFactory
* @param \LibDNS\Records\RDataBuilder $rDataBuilder
* @param \LibDNS\Records\TypeDefinitions\TypeDefinitionManager $typeDefinitionManager
*/
public function __construct(ResourceFactory $resourceFactory, RDataBuilder $rDataBuilder, TypeDefinitionManager $typeDefinitionManager)
{
$this->resourceFactory = $resourceFactory;
$this->rDataBuilder = $rDataBuilder;
$this->typeDefinitionManager = $typeDefinitionManager;
}
/**
* Create a new Resource object
*
* @param int $type Type of the resource, can be indicated using the ResourceTypes enum
* @return \LibDNS\Records\Resource
*/
public function build(int $type) : Resource
{
$typeDefinition = $this->typeDefinitionManager->getTypeDefinition($type);
$rData = $this->rDataBuilder->build($typeDefinition);
return $this->resourceFactory->create($type, $rData);
}
}

@ -0,0 +1,42 @@
<?php
declare (strict_types=1);
/**
* Creates ResourceBuilder objects
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\TypeBuilder;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\TypeFactory;
use WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions\TypeDefinitionManager;
use WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions\TypeDefinitionFactory;
use WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions\FieldDefinitionFactory;
/**
* Creates ResourceBuilder objects
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class ResourceBuilderFactory
{
/**
* Create a new ResourceBuilder object
*
* @param \LibDNS\Records\TypeDefinitions\TypeDefinitionManager $typeDefinitionManager
* @return \LibDNS\Records\ResourceBuilder
*/
public function create(TypeDefinitionManager $typeDefinitionManager = null) : ResourceBuilder
{
return new ResourceBuilder(new ResourceFactory(), new RDataBuilder(new RDataFactory(), new TypeBuilder(new TypeFactory())), $typeDefinitionManager ?: new TypeDefinitionManager(new TypeDefinitionFactory(), new FieldDefinitionFactory()));
}
}

@ -0,0 +1,32 @@
<?php
declare (strict_types=1);
/**
* Enumeration of possible resource CLASS values
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Enumeration;
/**
* Enumeration of possible resource CLASS values
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
abstract class ResourceClasses extends Enumeration
{
const IN = 1;
const CS = 2;
const CH = 3;
const HS = 4;
}

@ -0,0 +1,39 @@
<?php
declare (strict_types=1);
/**
* Creates Resource objects
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\TypeFactory;
/**
* Creates Resource objects
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
class ResourceFactory
{
/**
* Create a new Resource object
*
* @param int $type Can be indicated using the ResourceTypes enum
* @param \LibDNS\Records\RData $data
* @return \LibDNS\Records\Resource
*/
public function create(int $type, RData $data) : Resource
{
return new Resource(new TypeFactory(), $type, $data);
}
}

@ -0,0 +1,28 @@
<?php
declare (strict_types=1);
/**
* Enumeration of possible resource QCLASS values
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
/**
* Enumeration of possible resource QCLASS values
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
final class ResourceQClasses extends ResourceClasses
{
const ANY = 255;
}

@ -0,0 +1,31 @@
<?php
declare (strict_types=1);
/**
* Enumeration of possible resource QTYPE values
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
/**
* Enumeration of possible resource QTYPE values
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
final class ResourceQTypes extends ResourceTypes
{
const AXFR = 252;
const MAILB = 253;
const MAILA = 254;
const ALL = 255;
}

@ -0,0 +1,71 @@
<?php
declare (strict_types=1);
/**
* Enumeration of possible resource TYPE values
*
* PHP version 5.4
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records;
use WP_Ultimo\Dependencies\LibDNS\Enumeration;
/**
* Enumeration of possible resource TYPE values
*
* @category LibDNS
* @package Records
* @author Chris Wright <https://github.com/DaveRandom>
*/
abstract class ResourceTypes extends Enumeration
{
const A = 1;
const AAAA = 28;
const AFSDB = 18;
// const APL = 42;
const CAA = 257;
const CERT = 37;
const CNAME = 5;
const DHCID = 49;
const DLV = 32769;
const DNAME = 39;
const DNSKEY = 48;
const DS = 43;
const HINFO = 13;
// const HIP = 55;
// const IPSECKEY = 45;
const KEY = 25;
const KX = 36;
const ISDN = 20;
const LOC = 29;
const MB = 7;
const MD = 3;
const MF = 4;
const MG = 8;
const MINFO = 14;
const MR = 9;
const MX = 15;
const NAPTR = 35;
const NS = 2;
// const NSEC = 47;
// const NSEC3 = 50;
// const NSEC3PARAM = 50;
const NULL = 10;
const PTR = 12;
const RP = 17;
// const RRSIG = 46;
const RT = 21;
const SIG = 24;
const SOA = 6;
const SPF = 99;
const SRV = 33;
const TXT = 16;
const WKS = 11;
const X25 = 19;
}

@ -0,0 +1,130 @@
<?php
declare (strict_types=1);
/**
* Defines a field in a type
*
* PHP version 5.4
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Type;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Anything;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\BitMap;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Char;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\CharacterString;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\DomainName;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\IPv4Address;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\IPv6Address;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Long;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Short;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Types;
/**
* Defines a field in a type
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
*/
class FieldDefinition
{
/**
* @var int
*/
private $index;
/**
* @var string
*/
private $name;
/**
* @var int
*/
private $type;
/**
* @var bool
*/
private $allowsMultiple;
/**
* @var int
*/
private $minimumValues;
/**
* Constructor
*
* @param int $index
* @param string $name
* @param int $type
* @param bool $allowsMultiple
* @param int $minimumValues
*/
public function __construct(int $index, string $name, int $type, bool $allowsMultiple, int $minimumValues)
{
$this->index = $index;
$this->name = $name;
$this->type = $type;
$this->allowsMultiple = $allowsMultiple;
$this->minimumValues = $minimumValues;
}
/**
* Get the index of the field in the containing type
*
* @return int
*/
public function getIndex() : int
{
return $this->index;
}
/**
* Get the name of the field
*
* @return string
*/
public function getName() : string
{
return $this->name;
}
/**
* Get the type of the field
*
* @return int
*/
public function getType() : int
{
return $this->type;
}
/**
* Determine whether the field allows multiple values
*
* @return bool
*/
public function allowsMultiple() : bool
{
return $this->allowsMultiple;
}
/**
* Get the minimum number of values for the field
*
* @return int
*/
public function getMinimumValues() : int
{
return $this->minimumValues;
}
/**
* Assert that a Type object is valid for this field
*
* @param \LibDNS\Records\Types\Type
* @return bool
*/
public function assertDataValid(Type $value) : bool
{
return $this->type & Types::ANYTHING && $value instanceof Anything || $this->type & Types::BITMAP && $value instanceof BitMap || $this->type & Types::CHAR && $value instanceof Char || $this->type & Types::CHARACTER_STRING && $value instanceof CharacterString || $this->type & Types::DOMAIN_NAME && $value instanceof DomainName || $this->type & Types::IPV4_ADDRESS && $value instanceof IPv4Address || $this->type & Types::IPV6_ADDRESS && $value instanceof IPv6Address || $this->type & Types::LONG && $value instanceof Long || $this->type & Types::SHORT && $value instanceof Short;
}
}

@ -0,0 +1,41 @@
<?php
declare (strict_types=1);
/**
* Creates FieldDefinition objects
*
* PHP version 5.4
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions;
/**
* Creates FieldDefinition objects
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
*/
class FieldDefinitionFactory
{
/**
* Create a new FieldDefinition object
*
* @param int $index
* @param string $name
* @param int $type
* @param bool $allowsMultiple
* @param int $minimumValues
* @return \LibDNS\Records\TypeDefinitions\FieldDefinition
*/
public function create(int $index, string $name, int $type, bool $allowsMultiple, int $minimumValues) : FieldDefinition
{
return new FieldDefinition($index, $name, $type, $allowsMultiple, $minimumValues);
}
}

@ -0,0 +1,177 @@
<?php
declare (strict_types=1);
/**
* Defines a data type comprising multiple fields
*
* PHP version 5.4
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions;
/**
* Defines a data type comprising multiple fields
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
*/
class TypeDefinition implements \IteratorAggregate, \Countable
{
/**
* @var FieldDefinitionFactory Creates FieldDefinition objects
*/
private $fieldDefFactory;
/**
* @var int Number of fields in the type
*/
private $fieldCount;
/**
* @var \LibDNS\Records\TypeDefinitions\FieldDefinition The last field defined by the type
*/
private $lastField;
/**
* @var int[] Map of field indexes to type identifiers
*/
private $fieldDefs = [];
/**
* @var int[] Map of field names to indexes
*/
private $fieldNameMap = [];
/**
* @var callable Custom implementation for __toString() handling
*/
private $toStringFunction;
/**
* Constructor
*
* @param FieldDefinitionFactory $fieldDefFactory
* @param array $definition Structural definition of the fields
* @throws \InvalidArgumentException When the type definition is invalid
*/
public function __construct(FieldDefinitionFactory $fieldDefFactory, array $definition)
{
$this->fieldDefFactory = $fieldDefFactory;
if (isset($definition['__toString'])) {
if (!\is_callable($definition['__toString'])) {
throw new \InvalidArgumentException('Invalid type definition: __toString() implementation is not callable');
}
$this->toStringFunction = $definition['__toString'];
unset($definition['__toString']);
}
$this->fieldCount = \count($definition);
$index = 0;
foreach ($definition as $name => $type) {
$this->registerField($index++, $name, $type);
}
}
/**
* Register a field from the type definition
*
* @param int $index
* @param string $name
* @param int $type
* @throws \InvalidArgumentException When the field definition is invalid
*/
private function registerField(int $index, string $name, int $type)
{
if (!\preg_match('/^(?P<name>[\\w\\-]+)(?P<quantifier>\\+|\\*)?(?P<minimum>(?<=\\+)\\d+)?$/', \strtolower($name), $matches)) {
throw new \InvalidArgumentException('Invalid field definition ' . $name . ': Syntax error');
}
if (isset($matches['quantifier'])) {
if ($index !== $this->fieldCount - 1) {
throw new \InvalidArgumentException('Invalid field definition ' . $name . ': Quantifiers only allowed in last field');
}
if (!isset($matches['minimum'])) {
$matches['minimum'] = $matches['quantifier'] === '+' ? 1 : 0;
}
$allowsMultiple = \true;
$minimumValues = (int) $matches['minimum'];
} else {
$allowsMultiple = \false;
$minimumValues = 0;
}
$this->fieldDefs[$index] = $this->fieldDefFactory->create($index, $matches['name'], $type, $allowsMultiple, $minimumValues);
if ($index === $this->fieldCount - 1) {
$this->lastField = $this->fieldDefs[$index];
}
$this->fieldNameMap[$matches['name']] = $index;
}
/**
* Get the field definition indicated by the supplied index
*
* @param int $index
* @return \LibDNS\Records\TypeDefinitions\FieldDefinition
* @throws \OutOfBoundsException When the supplied index does not refer to a valid field
*/
public function getFieldDefinition(int $index) : FieldDefinition
{
if (isset($this->fieldDefs[$index])) {
$fieldDef = $this->fieldDefs[$index];
} else {
if ($index >= 0 && $this->lastField->allowsMultiple()) {
$fieldDef = $this->lastField;
} else {
throw new \OutOfBoundsException('Index ' . $index . ' does not refer to a valid field');
}
}
return $fieldDef;
}
/**
* Get the field index indicated by the supplied name
*
* @param string $name
* @return int
* @throws \OutOfBoundsException When the supplied name does not refer to a valid field
*/
public function getFieldIndexByName($name) : int
{
$fieldName = \strtolower($name);
if (!isset($this->fieldNameMap[$fieldName])) {
throw new \OutOfBoundsException('Name ' . $name . ' does not refer to a valid field');
}
return $this->fieldNameMap[$fieldName];
}
/**
* Get the __toString() implementation
*
* @return callable|null
*/
public function getToStringFunction()
{
return $this->toStringFunction;
}
/**
* Set the __toString() implementation
*
* @param callable $function
*/
public function setToStringFunction(callable $function)
{
$this->toStringFunction = $function;
}
/**
* Retrieve an iterator (IteratorAggregate interface)
*
* @return \Iterator
*/
public function getIterator() : \Iterator
{
return new \ArrayIterator($this->fieldDefs);
}
/**
* Get the number of fields (Countable interface)
*
* @return int
*/
public function count() : int
{
return $this->fieldCount;
}
}

@ -0,0 +1,39 @@
<?php
declare (strict_types=1);
/**
* Creates TypeDefinition objects
*
* PHP version 5.4
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions;
/**
* Creates TypeDefinition objects
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
*/
class TypeDefinitionFactory
{
/**
* Create a new TypeDefinition object
*
* @param FieldDefinitionFactory $fieldDefinitionFactory
* @param int[] $definition Structural definition of the fields
* @return \LibDNS\Records\TypeDefinitions\TypeDefinition
* @throws \InvalidArgumentException When the type definition is invalid
*/
public function create(FieldDefinitionFactory $fieldDefinitionFactory, array $definition) : TypeDefinition
{
return new TypeDefinition($fieldDefinitionFactory, $definition);
}
}

@ -0,0 +1,264 @@
<?php
declare (strict_types=1);
/**
* Holds data about how the RDATA sections of known resource record types are structured
*
* PHP version 5.4
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions;
use WP_Ultimo\Dependencies\LibDNS\Records\ResourceTypes;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\Types;
use WP_Ultimo\Dependencies\LibDNS\Records\Types\DomainName;
/**
* Holds data about how the RDATA sections of known resource record types are structured
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
*/
class TypeDefinitionManager
{
/**
* @var array[] How the RDATA sections of known resource record types are structured
*/
private $definitions = [];
/**
* @var array Cache of created definitions
*/
private $typeDefs = [];
/**
* @var \LibDNS\Records\TypeDefinitions\TypeDefinitionFactory
*/
private $typeDefFactory;
/**
* @var \LibDNS\Records\TypeDefinitions\FieldDefinitionFactory
*/
private $fieldDefFactory;
/**
* Constructor
*
* @param \LibDNS\Records\TypeDefinitions\TypeDefinitionFactory $typeDefFactory
* @param \LibDNS\Records\TypeDefinitions\FieldDefinitionFactory $fieldDefFactory
*/
public function __construct(TypeDefinitionFactory $typeDefFactory, FieldDefinitionFactory $fieldDefFactory)
{
$this->typeDefFactory = $typeDefFactory;
$this->fieldDefFactory = $fieldDefFactory;
$this->setDefinitions();
}
/**
* Set the internal definitions structure
*/
private function setDefinitions()
{
// This is defined in a method because PHP doesn't let you define properties with
// expressions at the class level. If anyone has a better way to do this I am open
// to any and all suggestions.
$this->definitions = [ResourceTypes::A => [
// RFC 1035
'address' => Types::IPV4_ADDRESS,
], ResourceTypes::AAAA => [
// RFC 3596
'address' => Types::IPV6_ADDRESS,
], ResourceTypes::AFSDB => [
// RFC 1183
'subtype' => Types::SHORT,
'hostname' => Types::DOMAIN_NAME,
], ResourceTypes::CAA => [
// RFC 6844
'flags' => Types::DOMAIN_NAME,
'tag' => Types::CHARACTER_STRING,
'value' => Types::ANYTHING,
], ResourceTypes::CERT => [
// RFC 4398
'type' => Types::SHORT,
'key-tag' => Types::SHORT,
'algorithm' => Types::CHAR,
'certificate' => Types::ANYTHING,
], ResourceTypes::CNAME => [
// RFC 1035
'cname' => Types::DOMAIN_NAME,
], ResourceTypes::DHCID => [
// RFC 4701
'identifier-type' => Types::SHORT,
'digest-type' => Types::CHAR,
'digest' => Types::ANYTHING,
], ResourceTypes::DLV => [
// RFC 4034
'key-tag' => Types::SHORT,
'algorithm' => Types::CHAR,
'digest-type' => Types::CHAR,
'digest' => Types::ANYTHING,
], ResourceTypes::DNAME => [
// RFC 4034
'target' => Types::DOMAIN_NAME,
], ResourceTypes::DNSKEY => [
// RFC 6672
'flags' => Types::SHORT,
'protocol' => Types::CHAR,
'algorithm' => Types::CHAR,
'public-key' => Types::ANYTHING,
], ResourceTypes::DS => [
// RFC 4034
'key-tag' => Types::SHORT,
'algorithm' => Types::CHAR,
'digest-type' => Types::CHAR,
'digest' => Types::ANYTHING,
], ResourceTypes::HINFO => [
// RFC 1035
'cpu' => Types::CHARACTER_STRING,
'os' => Types::CHARACTER_STRING,
], ResourceTypes::ISDN => [
// RFC 1183
'isdn-address' => Types::CHARACTER_STRING,
'sa' => Types::CHARACTER_STRING,
], ResourceTypes::KEY => [
// RFC 2535
'flags' => Types::SHORT,
'protocol' => Types::CHAR,
'algorithm' => Types::CHAR,
'public-key' => Types::ANYTHING,
], ResourceTypes::KX => [
// RFC 2230
'preference' => Types::SHORT,
'exchange' => Types::DOMAIN_NAME,
], ResourceTypes::LOC => [
// RFC 1876
'version' => Types::CHAR,
'size' => Types::CHAR,
'horizontal-precision' => Types::CHAR,
'vertical-precision' => Types::CHAR,
'latitude' => Types::LONG,
'longitude' => Types::LONG,
'altitude' => Types::LONG,
], ResourceTypes::MB => [
// RFC 1035
'madname' => Types::DOMAIN_NAME,
], ResourceTypes::MD => [
// RFC 1035
'madname' => Types::DOMAIN_NAME,
], ResourceTypes::MF => [
// RFC 1035
'madname' => Types::DOMAIN_NAME,
], ResourceTypes::MG => [
// RFC 1035
'mgmname' => Types::DOMAIN_NAME,
], ResourceTypes::MINFO => [
// RFC 1035
'rmailbx' => Types::DOMAIN_NAME,
'emailbx' => Types::DOMAIN_NAME,
], ResourceTypes::MR => [
// RFC 1035
'newname' => Types::DOMAIN_NAME,
], ResourceTypes::MX => [
// RFC 1035
'preference' => Types::SHORT,
'exchange' => Types::DOMAIN_NAME,
], ResourceTypes::NAPTR => [
// RFC 3403
'order' => Types::SHORT,
'preference' => Types::SHORT,
'flags' => Types::CHARACTER_STRING,
'services' => Types::CHARACTER_STRING,
'regexp' => Types::CHARACTER_STRING,
'replacement' => Types::DOMAIN_NAME,
], ResourceTypes::NS => [
// RFC 1035
'nsdname' => Types::DOMAIN_NAME,
], ResourceTypes::NULL => [
// RFC 1035
'data' => Types::ANYTHING,
], ResourceTypes::PTR => [
// RFC 1035
'ptrdname' => Types::DOMAIN_NAME,
], ResourceTypes::RP => [
// RFC 1183
'mbox-dname' => Types::DOMAIN_NAME,
'txt-dname' => Types::DOMAIN_NAME,
], ResourceTypes::RT => [
// RFC 1183
'preference' => Types::SHORT,
'intermediate-host' => Types::DOMAIN_NAME,
], ResourceTypes::SIG => [
// RFC 4034
'type-covered' => Types::SHORT,
'algorithm' => Types::CHAR,
'labels' => Types::CHAR,
'original-ttl' => Types::LONG,
'signature-expiration' => Types::LONG,
'signature-inception' => Types::LONG,
'key-tag' => Types::SHORT,
'signers-name' => Types::DOMAIN_NAME,
'signature' => Types::ANYTHING,
], ResourceTypes::SOA => [
// RFC 1035
'mname' => Types::DOMAIN_NAME,
'rname' => Types::DOMAIN_NAME,
'serial' => Types::LONG,
'refresh' => Types::LONG,
'retry' => Types::LONG,
'expire' => Types::LONG,
'minimum' => Types::LONG,
], ResourceTypes::SPF => [
// RFC 4408
'data+' => Types::CHARACTER_STRING,
], ResourceTypes::SRV => [
// RFC 2782
'priority' => Types::SHORT,
'weight' => Types::SHORT,
'port' => Types::SHORT,
'name' => Types::DOMAIN_NAME | DomainName::FLAG_NO_COMPRESSION,
], ResourceTypes::TXT => [
// RFC 1035
'txtdata+' => Types::CHARACTER_STRING,
], ResourceTypes::WKS => [
// RFC 1035
'address' => Types::IPV4_ADDRESS,
'protocol' => Types::SHORT,
'bit-map' => Types::BITMAP,
], ResourceTypes::X25 => [
// RFC 1183
'psdn-address' => Types::CHARACTER_STRING,
]];
}
/**
* Get a type definition for a record type if it is known
*
* @param int $recordType Resource type, can be indicated using the ResourceTypes enum
* @return \LibDNS\Records\TypeDefinitions\TypeDefinition
*/
public function getTypeDefinition(int $recordType)
{
if (!isset($this->typeDefs[$recordType])) {
$definition = isset($this->definitions[$recordType]) ? $this->definitions[$recordType] : ['data' => Types::ANYTHING];
$this->typeDefs[$recordType] = $this->typeDefFactory->create($this->fieldDefFactory, $definition);
}
return $this->typeDefs[$recordType];
}
/**
* Register a custom type definition
*
* @param int $recordType Resource type, can be indicated using the ResourceTypes enum
* @param int[]|\LibDNS\Records\TypeDefinitions\TypeDefinition $definition
* @throws \InvalidArgumentException When the type definition is invalid
*/
public function registerTypeDefinition(int $recordType, $definition)
{
if (!$definition instanceof TypeDefinition) {
if (!\is_array($definition)) {
throw new \InvalidArgumentException('Definition must be an array or an instance of ' . __NAMESPACE__ . '\\TypeDefinition');
}
$definition = $this->typeDefFactory->create($this->fieldDefFactory, $definition);
}
$this->typeDefs[$recordType] = $definition;
}
}

@ -0,0 +1,36 @@
<?php
declare (strict_types=1);
/**
* Creates TypeDefinitionManager objects
*
* PHP version 5.4
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\TypeDefinitions;
/**
* Creates TypeDefinitionManager objects
*
* @category LibDNS
* @package TypeDefinitions
* @author Chris Wright <https://github.com/DaveRandom>
*/
class TypeDefinitionManagerFactory
{
/**
* Create a new TypeDefinitionManager object
*
* @return \LibDNS\Records\TypeDefinitions\TypeDefinitionManager
*/
public function create() : TypeDefinitionManager
{
return new TypeDefinitionManager(new TypeDefinitionFactory(), new FieldDefinitionFactory());
}
}

@ -0,0 +1,45 @@
<?php
declare (strict_types=1);
/**
* Represents a generic binary data string
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents a generic binary data string
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class Anything extends Type
{
/**
* @var string
*/
protected $value = '';
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnexpectedValueException When the supplied value is outside the valid length range 0 - 65535
*/
public function setValue($value)
{
$value = (string) $value;
if (\strlen($value) > 65535) {
throw new \UnexpectedValueException('Untyped string length must be in the range 0 - 65535');
}
$this->value = $value;
}
}

@ -0,0 +1,63 @@
<?php
declare (strict_types=1);
/**
* Represents a bit map
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents a bit map
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class BitMap extends Type
{
/**
* @var string
*/
protected $value = '';
/**
* Set the internal value
*
* @param string $value The new value
*/
public function setValue($value)
{
$this->value = (string) $value;
}
/**
* Inspect the value of the bit at the specific index and optionally set a new value
*
* @param int $index
* @param bool $newValue The new value
* @return bool The old value
*/
public function isBitSet(int $index, bool $newValue = null) : bool
{
$charIndex = (int) ($index / 8);
$bitMask = 0b10000000 >> $index % 8;
$result = \false;
if (isset($this->value[$charIndex])) {
$result = (bool) (\ord($this->value[$charIndex]) & $bitMask);
}
if (isset($newValue) && $newValue != $result) {
if (!isset($this->value[$charIndex])) {
$this->value = \str_pad($this->value, $charIndex + 1, "\x00", \STR_PAD_RIGHT);
}
$this->value[$charIndex] = \chr(\ord($this->value[$charIndex]) & ~$bitMask | ($newValue ? $bitMask : 0));
}
return $result;
}
}

@ -0,0 +1,50 @@
<?php
declare (strict_types=1);
/**
* Represents an 8-bit unsigned integer
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents an 8-bit unsigned integer
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class Char extends Type
{
/**
* @var int
*/
protected $value = 0;
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnderflowException When the supplied value is less than 0
* @throws \OverflowException When the supplied value is greater than 255
*/
public function setValue($value)
{
$value = (int) $value;
if ($value < 0) {
throw new \UnderflowException('Char value must be in the range 0 - 255');
} else {
if ($value > 255) {
throw new \OverflowException('Char value must be in the range 0 - 255');
}
}
$this->value = $value;
}
}

@ -0,0 +1,45 @@
<?php
declare (strict_types=1);
/**
* Represents a binary character string
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents a binary character string
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class CharacterString extends Type
{
/**
* @var string
*/
protected $value = '';
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnexpectedValueException When the supplied value is outside the valid length range 0 - 255
*/
public function setValue($value)
{
$value = (string) $value;
if (\strlen($value) > 255) {
throw new \UnexpectedValueException('Character string length must be in the range 0 - 255');
}
$this->value = $value;
}
}

@ -0,0 +1,104 @@
<?php
declare (strict_types=1);
/**
* Represents a fully qualified domain name
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents a fully qualified domain name
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class DomainName extends Type
{
const FLAG_NO_COMPRESSION = \PHP_INT_SIZE === 4 ? -2147483648 : 0x80000000;
/**
* @var string
*/
protected $value = '';
/**
* @var string[] The value as a list of labels
*/
private $labels = [];
/**
* Constructor
*
* @param string|string[] $value
* @throws \UnexpectedValueException When the supplied value is not a valid domain name
*/
public function __construct($value = null)
{
if (\is_array($value)) {
$this->setLabels($value);
} else {
parent::__construct($value);
}
}
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnexpectedValueException When the supplied value is not a valid domain name
*/
public function setValue($value)
{
$this->setLabels(\explode('.', (string) $value));
}
/**
* Get the domain name labels
*
* @param bool $tldFirst Whether to return the label list ordered with the TLD label first
* @return string[]
*/
public function getLabels($tldFirst = \false) : array
{
return $tldFirst ? \array_reverse($this->labels) : $this->labels;
}
/**
* Set the domain name labels
*
* @param string[] $labels The new label list
* @param bool $tldFirst Whether the supplied label list is ordered with the TLD label first
* @throws \UnexpectedValueException When the supplied label list is not a valid domain name
*/
public function setLabels(array $labels, $tldFirst = \false)
{
if (!$labels) {
$this->labels = [];
$this->value = '';
return;
}
$length = $count = 0;
foreach ($labels as &$label) {
$label = \WP_Ultimo\Dependencies\LibDNS\normalize_name($label);
$labelLength = \strlen($label);
if ($labelLength > 63) {
throw new \InvalidArgumentException('Label list is not a valid domain name: Label ' . $label . ' length exceeds 63 byte limit');
}
$length += $labelLength + 1;
$count++;
}
$tld = $tldFirst ? $labels[0] : $labels[$count - 1];
if ($tld === '') {
$length--;
}
if ($length + 1 > 255) {
throw new \InvalidArgumentException('Label list is not a valid domain name: Total length exceeds 255 byte limit');
}
$this->labels = $tldFirst ? \array_reverse($labels) : $labels;
$this->value = \implode('.', $this->labels);
}
}

@ -0,0 +1,88 @@
<?php
declare (strict_types=1);
/**
* Represents an IPv4 address
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents an IPv4 address
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class IPv4Address extends Type
{
/**
* @var string
*/
protected $value = '0.0.0.0';
/**
* @var int[] The octets of the address
*/
private $octets = [0, 0, 0, 0];
/**
* Constructor
*
* @param string|int[] $value String representation or octet list
* @throws \UnexpectedValueException When the supplied value is not a valid IPv4 address
*/
public function __construct($value = null)
{
if (\is_array($value)) {
$this->setOctets($value);
} else {
parent::__construct($value);
}
}
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnexpectedValueException When the supplied value is outside the valid length range 0 - 65535
*/
public function setValue($value)
{
$this->setOctets(\explode('.', (string) $value));
}
/**
* Get the address octets
*
* @return int[]
*/
public function getOctets() : array
{
return $this->octets;
}
/**
* Set the address octets
*
* @param int[] $octets The new address octets
* @throws \UnexpectedValueException When the supplied octet list is not a valid IPv4 address
*/
public function setOctets(array $octets)
{
if (\count($octets) !== 4) {
throw new \UnexpectedValueException('Octet list is not a valid IPv4 address: invalid octet count');
}
foreach ($octets as &$octet) {
if (!\is_int($octet) && !\ctype_digit((string) $octet) || $octet < 0x0 || $octet > 0xff) {
throw new \UnexpectedValueException('Octet list is not a valid IPv4 address: invalid octet value ' . $octet);
}
$octet = (int) $octet;
}
$this->octets = \array_values($octets);
$this->value = \implode('.', $this->octets);
}
}

@ -0,0 +1,152 @@
<?php
declare (strict_types=1);
/**
* Represents an IPv6 address
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents an IPv6 address
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class IPv6Address extends Type
{
/**
* @var string
*/
protected $value = '::';
/**
* @var int[] The shorts of the address
*/
private $shorts = [0, 0, 0, 0, 0, 0, 0, 0];
/**
* Create a compressed string representation of an IPv6 address
*
* @param int[] $shorts Address shorts
* @return string
*/
private function createCompressedString($shorts)
{
$compressLen = $compressPos = $currentLen = $currentPos = 0;
$inBlock = \false;
for ($i = 0; $i < 8; $i++) {
if ($shorts[$i] === 0) {
if (!$inBlock) {
$inBlock = \true;
$currentPos = $i;
}
$currentLen++;
} else {
if ($inBlock) {
if ($currentLen > $compressLen) {
$compressLen = $currentLen;
$compressPos = $currentPos;
}
$inBlock = \false;
$currentPos = $currentLen = 0;
}
}
$shorts[$i] = \dechex($shorts[$i]);
}
if ($inBlock) {
$compressLen = $currentLen;
$compressPos = $currentPos;
}
if ($compressLen > 1) {
if ($compressLen === 8) {
$replace = ['', '', ''];
} else {
if ($compressPos === 0 || $compressPos + $compressLen === 8) {
$replace = ['', ''];
} else {
$replace = [''];
}
}
\array_splice($shorts, $compressPos, $compressLen, $replace);
}
return \implode(':', $shorts);
}
/**
* Constructor
*
* @param string|int[] $value String representation or shorts list
* @throws \UnexpectedValueException When the supplied value is not a valid IPv6 address
*/
public function __construct($value = null)
{
if (\is_array($value)) {
$this->setShorts($value);
} else {
parent::__construct($value);
}
}
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnexpectedValueException When the supplied value is outside the valid length range 0 - 65535
*/
public function setValue($value)
{
$shorts = \explode(':', (string) $value);
$count = \count($shorts);
if ($count < 3 || $count > 8) {
throw new \UnexpectedValueException('Value is not a valid IPv6 address: invalid short count');
} else {
if ($shorts[0] === '' && $shorts[1] === '') {
$shorts = \array_pad($shorts, -8, '0');
} else {
if ($shorts[$count - 2] === '' && $shorts[$count - 1] === '') {
$shorts = \array_pad($shorts, 8, '0');
} else {
if (\false !== ($pos = \array_search('', $shorts, \true))) {
\array_splice($shorts, $pos, 1, \array_fill(0, 8 - ($count - 1), '0'));
}
}
}
}
$this->setShorts(\array_map('hexdec', $shorts));
}
/**
* Get the address shorts
*
* @return int[]
*/
public function getShorts() : array
{
return $this->shorts;
}
/**
* Set the address shorts
*
* @param int[] $shorts The new address shorts
* @throws \UnexpectedValueException When the supplied short list is not a valid IPv6 address
*/
public function setShorts(array $shorts)
{
if (\count($shorts) !== 8) {
throw new \UnexpectedValueException('Short list is not a valid IPv6 address: invalid short count');
}
foreach ($shorts as &$short) {
if (!\is_int($short) && !\ctype_digit((string) $short) || $short < 0x0 || $short > 0xffff) {
throw new \UnexpectedValueException('Short list is not a valid IPv6 address: invalid short value ' . $short);
}
$short = (int) $short;
}
$this->shorts = \array_values($shorts);
$this->value = $this->createCompressedString($this->shorts);
}
}

@ -0,0 +1,52 @@
<?php
declare (strict_types=1);
/**
* Represents a 32-bit unsigned integer
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents a 32-bit unsigned integer
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class Long extends Type
{
/**
* @var int
*/
protected $value = 0;
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnderflowException When the supplied value is less than 0
* @throws \OverflowException When the supplied value is greater than 4294967296
*/
public function setValue($value)
{
$value = (int) $value;
if (\PHP_INT_SIZE > 4) {
if ($value < 0) {
throw new \UnderflowException('Long integer value must be in the range 0 - 4294967296');
} else {
if ($value > 0xffffffff) {
throw new \OverflowException('Long integer value must be in the range 0 - 4294967296');
}
}
}
$this->value = $value;
}
}

@ -0,0 +1,50 @@
<?php
declare (strict_types=1);
/**
* Represents a 16-bit unsigned integer
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Represents a 16-bit unsigned integer
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class Short extends Type
{
/**
* @var int
*/
protected $value = 0;
/**
* Set the internal value
*
* @param string $value The new value
* @throws \UnderflowException When the supplied value is less than 0
* @throws \OverflowException When the supplied value is greater than 65535
*/
public function setValue($value)
{
$value = (int) $value;
if ($value < 0) {
throw new \UnderflowException('Short integer value must be in the range 0 - 65535');
} else {
if ($value > 0xffff) {
throw new \OverflowException('Short integer value must be in the range 0 - 65535');
}
}
$this->value = $value;
}
}

@ -0,0 +1,68 @@
<?php
declare (strict_types=1);
/**
* Base class for simple data types
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Base class for simple data types
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
abstract class Type
{
/**
* @var mixed The internal value
*/
protected $value;
/**
* Constructor
*
* @param string $value Internal value
* @throws \RuntimeException When the supplied value is invalid
*/
public function __construct(string $value = null)
{
if (isset($value)) {
$this->setValue($value);
}
}
/**
* Magic method for type coercion to string
*
* @return string
*/
public function __toString() : string
{
return (string) $this->value;
}
/**
* Get the internal value
*
* @return mixed
*/
public function getValue()
{
return $this->value;
}
/**
* Set the internal value
*
* @param string $value The new value
* @throws \RuntimeException When the supplied value is invalid
*/
public abstract function setValue($value);
}

@ -0,0 +1,54 @@
<?php
declare (strict_types=1);
/**
* Builds Types from type definitions
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Builds Types from type definitions
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class TypeBuilder
{
/**
* @var \LibDNS\Records\Types\TypeFactory
*/
private $typeFactory;
/**
* Constructor
*
* @param \LibDNS\Records\Types\TypeFactory $typeFactory
*/
public function __construct(TypeFactory $typeFactory)
{
$this->typeFactory = $typeFactory;
}
/**
* Build a new Type object corresponding to a resource record type
*
* @param int $type Data type, can be indicated using the Types enum
* @return \LibDNS\Records\Types\Type
*/
public function build(int $type) : Type
{
static $typeMap = [Types::ANYTHING => 'createAnything', Types::BITMAP => 'createBitMap', Types::CHAR => 'createChar', Types::CHARACTER_STRING => 'createCharacterString', Types::DOMAIN_NAME => 'createDomainName', Types::IPV4_ADDRESS => 'createIPv4Address', Types::IPV6_ADDRESS => 'createIPv6Address', Types::LONG => 'createLong', Types::SHORT => 'createShort'];
if (!isset($typeMap[$type])) {
throw new \InvalidArgumentException('Invalid Type identifier ' . $type);
}
return $this->typeFactory->{$typeMap[$type]}();
}
}

@ -0,0 +1,117 @@
<?php
declare (strict_types=1);
/**
* Creates Type objects
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
/**
* Creates Type objects
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
class TypeFactory
{
/**
* Create a new Anything object
*
* @param string $value
* @return \LibDNS\Records\Types\Anything
*/
public function createAnything(string $value = null)
{
return new Anything($value);
}
/**
* Create a new BitMap object
*
* @param string $value
* @return \LibDNS\Records\Types\BitMap
*/
public function createBitMap(string $value = null)
{
return new BitMap($value);
}
/**
* Create a new Char object
*
* @param int $value
* @return \LibDNS\Records\Types\Char
*/
public function createChar(int $value = null)
{
return new Char((string) $value);
}
/**
* Create a new CharacterString object
*
* @param string $value
* @return \LibDNS\Records\Types\CharacterString
*/
public function createCharacterString(string $value = null)
{
return new CharacterString($value);
}
/**
* Create a new DomainName object
*
* @param string|string[] $value
* @return \LibDNS\Records\Types\DomainName
*/
public function createDomainName($value = null)
{
return new DomainName($value);
}
/**
* Create a new IPv4Address object
*
* @param string|int[] $value
* @return \LibDNS\Records\Types\IPv4Address
*/
public function createIPv4Address($value = null)
{
return new IPv4Address($value);
}
/**
* Create a new IPv6Address object
*
* @param string|int[] $value
* @return \LibDNS\Records\Types\IPv6Address
*/
public function createIPv6Address($value = null)
{
return new IPv6Address($value);
}
/**
* Create a new Long object
*
* @param int $value
* @return \LibDNS\Records\Types\Long
*/
public function createLong(int $value = null)
{
return new Long((string) $value);
}
/**
* Create a new Short object
*
* @param int $value
* @return \LibDNS\Records\Types\Short
*/
public function createShort(int $value = null)
{
return new Short((string) $value);
}
}

@ -0,0 +1,37 @@
<?php
declare (strict_types=1);
/**
* Enumeration of simple data types
*
* PHP version 5.4
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
* @copyright Copyright (c) Chris Wright <https://github.com/DaveRandom>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 2.0.0
*/
namespace WP_Ultimo\Dependencies\LibDNS\Records\Types;
use WP_Ultimo\Dependencies\LibDNS\Enumeration;
/**
* Enumeration of simple data types
*
* @category LibDNS
* @package Types
* @author Chris Wright <https://github.com/DaveRandom>
*/
final class Types extends Enumeration
{
const ANYTHING = 0b1;
const BITMAP = 0b10;
const CHAR = 0b100;
const CHARACTER_STRING = 0b1000;
const DOMAIN_NAME = 0b10000;
const IPV4_ADDRESS = 0b100000;
const IPV6_ADDRESS = 0b1000000;
const LONG = 0b10000000;
const SHORT = 0b100000000;
}