1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969 |
- // --------------------------------------------------------------------------------
- // IMNXPORT.IDL
- // Copyright (c)1993-1998 Microsoft Corporation, All Rights Reserved
- //
- // Authors:
- // Steven J. Bailey (sbailey)
- // Steve Serdy (steveser)
- // Raymond Cheng (raych)
- // Greg Friedman (gregfrie)
- //
- // Date: 11/12/96
- // --------------------------------------------------------------------------------
- import "imnact.idl";
- interface IInternetTransport;
- interface ISMTPTransport;
- interface IPOP3Transport;
- interface INNTPTransport;
- interface IRASTransport;
- interface IIMAPTransport;
- interface IHTTPMailTransport;
- interface IPropFindResponse;
- cpp_quote("//--------------------------------------------------------------------------------")
- cpp_quote("// IMNXPORT.H")
- cpp_quote("//--------------------------------------------------------------------------------")
- cpp_quote("// (C) Copyright 1995-1998 Microsoft Corporation. All Rights Reserved.")
- cpp_quote("//")
- cpp_quote("// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF")
- cpp_quote("// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO")
- cpp_quote("// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A")
- cpp_quote("// PARTICULAR PURPOSE.")
- cpp_quote("//--------------------------------------------------------------------------------")
- cpp_quote("")
- cpp_quote("#pragma comment(lib,\"uuid.lib\")")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// Dependencies")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#include <ras.h>")
- cpp_quote("#include <raserror.h>")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// GUIDS")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// {CA30CC91-B1B3-11d0-85D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {0DF2C7E1-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_ITransportCallback, 0xdf2c7e1, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {1F636C01-364E-11d0-81D3-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_IInternetTransport, 0x1f636c01, 0x364e, 0x11d0, 0x81, 0xd3, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {1F636C02-364E-11d0-81D3-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_ISMTPCallback, 0x1f636c02, 0x364e, 0x11d0, 0x81, 0xd3, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {FD853CE6-7F86-11d0-8252-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {0DF2C7E2-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_ISMTPTransport, 0xdf2c7e2, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {0DF2C7EC-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {0DF2C7E3-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_IPOP3Callback, 0xdf2c7e3, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {FD853CE7-7F86-11d0-8252-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {0DF2C7E4-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_IPOP3Transport, 0xdf2c7e4, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {0DF2C7E5-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_INNTPCallback, 0xdf2c7e5, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {FD853CE8-7F86-11d0-8252-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {0DF2C7E6-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_INNTPTransport, 0xdf2c7e6, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {0DF2C7ED-3435-11d0-81D0-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_INNTPTransport2, 0xdf2c7eD, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {36D88911-3CD6-11d0-81DF-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_IRASCallback, 0x36d88911, 0x3cd6, 0x11d0, 0x81, 0xdf, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {FD853CE9-7F86-11d0-8252-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {8A950001-3CCF-11d0-81DF-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_IRASTransport, 0x8a950001, 0x3ccf, 0x11d0, 0x81, 0xdf, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {FD853CEA-7F86-11d0-8252-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {8C438160-4EF6-11d0-874F-00AA00530EE9}")
- cpp_quote("DEFINE_GUID(IID_IRangeList, 0x8c438160, 0x4ef6, 0x11d0, 0x87, 0x4f, 0x0, 0xaa, 0x0, 0x53, 0xe, 0xe9);")
- cpp_quote("")
- cpp_quote("// {E9E9D8A3-4EDD-11d0-874F-00AA00530EE9}")
- cpp_quote("DEFINE_GUID(IID_IIMAPCallback, 0xe9e9d8a3, 0x4edd, 0x11d0, 0x87, 0x4f, 0x0, 0xaa, 0x0, 0x53, 0xe, 0xe9);")
- cpp_quote("")
- cpp_quote("// {FD853CEB-7F86-11d0-8252-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("// {E9E9D8A8-4EDD-11d0-874F-00AA00530EE9}")
- cpp_quote("DEFINE_GUID(IID_IIMAPTransport, 0xe9e9d8a8, 0x4edd, 0x11d0, 0x87, 0x4f, 0x0, 0xaa, 0x0, 0x53, 0xe, 0xe9);")
- cpp_quote("")
- cpp_quote("// {DA8283C0-37C5-11d2-ACD9-0080C7B6E3C5}")
- cpp_quote("DEFINE_GUID(IID_IIMAPTransport2, 0xda8283c0, 0x37c5, 0x11d2, 0xac, 0xd9, 0x0, 0x80, 0xc7, 0xb6, 0xe3, 0xc5);")
- cpp_quote("")
- cpp_quote("// {07849A11-B520-11d0-85D5-00C04FD85AB4}")
- cpp_quote("DEFINE_GUID(IID_IBindMessageStream, 0x7849a11, 0xb520, 0x11d0, 0x85, 0xd5, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
- cpp_quote("")
- cpp_quote("// {CA30F3FF-C9AC-11d1-9A3A-00C04FA309D4}")
- cpp_quote("DEFINE_GUID(IID_ITransportCallbackService, 0xca30f3ff, 0xc9ac, 0x11d1, 0x9a, 0x3a, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
- cpp_quote("")
- cpp_quote("// {19F6481C-E5F0-11d1-A86E-0000F8084F96}")
- cpp_quote("DEFINE_GUID(IID_IHTTPMailCallback, 0x19f6481c, 0xe5f0, 0x11d1, 0xa8, 0x6e, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("")
- cpp_quote("// {5A580C11-E5EB-11d1-A86E-0000F8084F96}")
- cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport,0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("// {B8BDE03C-E548-11d1-A86E-0000F8084F96}")
- cpp_quote("DEFINE_GUID(IID_IHTTPMailTransport, 0xb8bde03c, 0xe548, 0x11d1, 0xa8, 0x6e, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("")
- cpp_quote("// {BB847B8A-054A-11d2-A894-0000F8084F96}")
- cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x54a, 0x11d2, 0xa8, 0x94, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("// {5CFC6308-0544-11d2-A894-0000F8084F96}")
- cpp_quote("DEFINE_GUID(IID_IPropFindRequest, 0x5cfc6308, 0x544, 0x11d2, 0xa8, 0x94, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("")
- cpp_quote("// {0DEE87DE-0547-11d2-A894-0000F8084F96}")
- cpp_quote("DEFINE_GUID(IID_IPropFindMultiResponse, 0xdee87de, 0x547, 0x11d2, 0xa8, 0x94, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("")
- cpp_quote("// {8A523716-0548-11d2-A894-0000F8084F96}")
- cpp_quote("DEFINE_GUID(IID_IPropFindResponse, 0x8a523716, 0x548, 0x11d2, 0xa8, 0x94, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("")
- cpp_quote("// {72A58FF8-227D-11d2-A8B5-0000F8084F96}")
- cpp_quote("DEFINE_GUID(IID_IDAVNamespaceArbiter, 0x72a58ff8, 0x227d, 0x11d2, 0xa8, 0xb5, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("")
- cpp_quote("// {EA678830-235D-11d2-A8B6-0000F8084F96}")
- cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("// {AB8B8D2A-227F-11d2-A8B5-0000F8084F96}")
- cpp_quote("DEFINE_GUID(IID_IPropPatchRequest, 0xab8b8d2a, 0x227f, 0x11d2, 0xa8, 0xb5, 0x0, 0x0, 0xf8, 0x8, 0x4f, 0x96);")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// Errors")
- cpp_quote("// --------------------------------------------------------------------------------")
- //;begin_internal
- //
- // NOTE: All inetcomm error codes must reside between CC00 and CFFF (a 1k block).
- // This has been approved by Johann Posch (johannp)
- // We further subdivide this range as follows:
- // CC00-CCFF IMNXPORT results
- // CD00-CDFF IMNACCT results
- // CE00-CEFF MIMEOLE results
- // CF00-CFFF undefined, do not use
- // (t-erikne 03/24/97)
- //
- //;end_internal
- cpp_quote("#ifndef FACILITY_INTERNET")
- cpp_quote("#define FACILITY_INTERNET 12")
- cpp_quote("#endif")
- cpp_quote("#ifndef HR_E")
- cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
- cpp_quote("#endif")
- cpp_quote("#ifndef HR_S")
- cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
- cpp_quote("#endif")
- cpp_quote("#ifndef HR_CODE")
- cpp_quote("#define HR_CODE(hr) (INT)(hr & 0xffff)")
- cpp_quote("#endif")
- cpp_quote("")
- //;begin_internal
- // HRESULTS are even further subdivided in this file
- // NOTE: you should never progammatically rely on this ordering
- // it simply gives you a visual cue in the DOUTs
- // CC00-CC2F General
- // CC30-CC3F HTTPMail (first range)
- // CC40-CC5F WINSOCK
- // CC60-CC8F SMTP
- // CC90-CC9F POP3
- // CCA0-CCBF NNTP
- // CCC0-CCCF RAS
- // CCD0-CCEF IMAP
- // CCF0-CCFF HTTPMail (second range)
- //;end_internal
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// General Imnxport Return Values")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#define IXP_E_LOAD_SICILY_FAILED HR_E(0xCC00)") // hrFailedToLoadSicily
- cpp_quote("#define IXP_E_INVALID_CERT_CN HR_E(0xCC01)") // hrInvalidCertCN
- cpp_quote("#define IXP_E_INVALID_CERT_DATE HR_E(0xCC02)") // hrInvalidCertDate
- cpp_quote("#define IXP_E_ALREADY_CONNECTED HR_E(0xCC03)") // hrAlreadyConnected
- cpp_quote("#define IXP_E_CONN HR_E(0xCC04)") // hrConn
- cpp_quote("#define IXP_E_NOT_CONNECTED HR_E(0xCC05)") // hrNotConnected
- cpp_quote("#define IXP_E_CONN_SEND HR_E(0xCC06)") // hrConnSend
- cpp_quote("#define IXP_E_WOULD_BLOCK HR_E(0xCC07)") // hrWouldBlock
- cpp_quote("#define IXP_E_INVALID_STATE HR_E(0xCC08)") // hrInvalidState
- cpp_quote("#define IXP_E_CONN_RECV HR_E(0xCC09)") // hrConnRecv
- cpp_quote("#define IXP_E_INCOMPLETE HR_E(0xCC0A)") // hrIncomplete
- cpp_quote("#define IXP_E_BUSY HR_E(0xCC0B)")
- cpp_quote("#define IXP_E_NOT_INIT HR_E(0xCC0C)")
- cpp_quote("#define IXP_E_CANT_FIND_HOST HR_E(0xCC0D)")
- cpp_quote("#define IXP_E_FAILED_TO_CONNECT HR_E(0xCC0E)")
- cpp_quote("#define IXP_E_CONNECTION_DROPPED HR_E(0xCC0F)")
- cpp_quote("#define IXP_E_INVALID_ADDRESS HR_E(0xCC10)")
- cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST HR_E(0xCC11)")
- cpp_quote("#define IXP_E_SOCKET_READ_ERROR HR_E(0xCC12)")
- cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR HR_E(0xCC13)")
- cpp_quote("#define IXP_E_SOCKET_INIT_ERROR HR_E(0xCC14)")
- cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR HR_E(0xCC15)")
- cpp_quote("#define IXP_E_INVALID_ACCOUNT HR_E(0xCC16)")
- cpp_quote("#define IXP_E_USER_CANCEL HR_E(0xCC17)")
- cpp_quote("#define IXP_E_SICILY_LOGON_FAILED HR_E(0xCC18)") // hrSicilyLogonFailed
- cpp_quote("#define IXP_E_TIMEOUT HR_E(0xCC19)")
- cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED HR_E(0xCC1A)")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// WINSOCK Errors")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#define IXP_E_WINSOCK_WSASYSNOTREADY HR_E(0xCC40)")
- cpp_quote("#define IXP_E_WINSOCK_WSAVERNOTSUPPORTED HR_E(0xCC41)")
- cpp_quote("#define IXP_E_WINSOCK_WSAEPROCLIM HR_E(0xCC42)")
- cpp_quote("#define IXP_E_WINSOCK_WSAEFAULT HR_E(0xCC43)")
- cpp_quote("#define IXP_E_WINSOCK_FAILED_WSASTARTUP HR_E(0xCC44)")
- cpp_quote("#define IXP_E_WINSOCK_WSAEINPROGRESS HR_E(0xCC45)")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// SMTP Command Response Values")
- cpp_quote("//--------------------------------------------------------------------------------")
- cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR HR_E(0xCC60)")
- cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE HR_E(0xCC61)")
- cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR HR_E(0xCC62)")
- cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX HR_E(0xCC63)")
- cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL HR_E(0xCC64)")
- cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ HR_E(0xCC65)")
- cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)")
- cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE HR_E(0xCC67)")
- cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY HR_E(0xCC68)")
- cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND HR_E(0xCC69)")
- cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING HR_E(0xCC6A)")
- cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL HR_E(0xCC6B)")
- cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE HR_E(0xCC6C)")
- cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW HR_E(0xCC6D)")
- cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX HR_E(0xCC6E)")
- cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED HR_E(0xCC6F)")
- cpp_quote("")
- cpp_quote("#define IXP_S_SMTP_211_SYSTEM_STATUS HR_S(0xCC70)")
- cpp_quote("#define IXP_S_SMTP_214_HELP_MESSAGE HR_S(0xCC71)")
- cpp_quote("#define IXP_S_SMTP_220_READY HR_S(0xCC72)")
- cpp_quote("#define IXP_S_SMTP_221_CLOSING HR_S(0xCC73)")
- cpp_quote("#define IXP_S_SMTP_250_MAIL_ACTION_OKAY HR_S(0xCC74)")
- cpp_quote("#define IXP_S_SMTP_251_FORWARDING_MAIL HR_S(0xCC75)")
- cpp_quote("#define IXP_S_SMTP_354_START_MAIL_INPUT HR_S(0xCC76)")
- cpp_quote("#define IXP_S_SMTP_CONTINUE HR_S(0xCC77)")
- cpp_quote("#define IXP_S_SMTP_334_AUTH_READY_RESPONSE HR_S(0xCC78)")
- cpp_quote("#define IXP_S_SMTP_245_AUTH_SUCCESS HR_S(0xCC79)")
- cpp_quote("")
- cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER HR_E(0xCC78)")
- cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS HR_E(0xCC79)")
- cpp_quote("#define IXP_E_SMTP_NO_SENDER HR_E(0xCC7A)")
- cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS HR_E(0xCC7B)")
- cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED HR_E(0xCC7C)")
- cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT HR_E(0xCC7D)")
- cpp_quote("#define IXP_S_SMTP_NO_DSN_SUPPORT HR_E(0xCC7E)")
- cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED HR_E(0xCC7F)")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// POP3 Command Response Values")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#define IXP_E_POP3_RESPONSE_ERROR HR_E(0xCC90)")
- cpp_quote("#define IXP_E_POP3_INVALID_USER_NAME HR_E(0xCC91)") // hrPOP3BadUserName
- cpp_quote("#define IXP_E_POP3_INVALID_PASSWORD HR_E(0xCC92)") // hrPOP3BadPassword
- cpp_quote("#define IXP_E_POP3_PARSE_FAILURE HR_E(0xCC93)")
- cpp_quote("#define IXP_E_POP3_NEED_STAT HR_E(0xCC94)")
- cpp_quote("#define IXP_E_POP3_NO_MESSAGES HR_E(0xCC95)")
- cpp_quote("#define IXP_E_POP3_NO_MARKED_MESSAGES HR_E(0xCC96)")
- cpp_quote("#define IXP_E_POP3_POPID_OUT_OF_RANGE HR_E(0xCC97)")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// NNTP Command Response Values")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#define IXP_E_NNTP_RESPONSE_ERROR HR_E(0xCCA0)") // hrInvalidResponse
- cpp_quote("#define IXP_E_NNTP_NEWGROUPS_FAILED HR_E(0xCCA1)")
- cpp_quote("#define IXP_E_NNTP_LIST_FAILED HR_E(0xCCA2)")
- cpp_quote("#define IXP_E_NNTP_LISTGROUP_FAILED HR_E(0xCCA3)")
- cpp_quote("#define IXP_E_NNTP_GROUP_FAILED HR_E(0xCCA4)")
- cpp_quote("#define IXP_E_NNTP_GROUP_NOTFOUND HR_E(0xCCA5)")
- cpp_quote("#define IXP_E_NNTP_ARTICLE_FAILED HR_E(0xCCA6)")
- cpp_quote("#define IXP_E_NNTP_HEAD_FAILED HR_E(0xCCA7)")
- cpp_quote("#define IXP_E_NNTP_BODY_FAILED HR_E(0xCCA8)")
- cpp_quote("#define IXP_E_NNTP_POST_FAILED HR_E(0xCCA9)")
- cpp_quote("#define IXP_E_NNTP_NEXT_FAILED HR_E(0xCCAA)")
- cpp_quote("#define IXP_E_NNTP_DATE_FAILED HR_E(0xCCAB)")
- cpp_quote("#define IXP_E_NNTP_HEADERS_FAILED HR_E(0xCCAC)")
- cpp_quote("#define IXP_E_NNTP_XHDR_FAILED HR_E(0xCCAD)")
- cpp_quote("#define IXP_E_NNTP_INVALID_USERPASS HR_E(0xCCAE)")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// NNTP Server Response Values")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#define IXP_NNTP_DATE_RESPONSE 111")
- cpp_quote("#define IXP_NNTP_POST_ALLOWED 200")
- cpp_quote("#define IXP_NNTP_POST_NOTALLOWED 201")
- cpp_quote("#define IXP_NNTP_GROUP_SELECTED 211")
- cpp_quote("#define IXP_NNTP_LIST_DATA_FOLLOWS 215")
- cpp_quote("#define IXP_NNTP_ARTICLE_FOLLOWS 220")
- cpp_quote("#define IXP_NNTP_HEAD_FOLLOWS 221")
- cpp_quote("#define IXP_NNTP_BODY_FOLLOWS 222")
- cpp_quote("#define IXP_NNTP_ARTICLE_RETRIEVED 223")
- cpp_quote("#define IXP_NNTP_OVERVIEW_FOLLOWS 224")
- cpp_quote("#define IXP_NNTP_NEWNEWSGROUPS_FOLLOWS 231")
- cpp_quote("#define IXP_NNTP_ARTICLE_POSTED_OK 240")
- cpp_quote("#define IXP_NNTP_AUTHORIZATION_ACCEPTED 250")
- cpp_quote("#define IXP_NNTP_AUTH_OK 281")
- cpp_quote("#define IXP_NNTP_SEND_ARTICLE_TO_POST 340")
- cpp_quote("#define IXP_NNTP_CONTINUE_AUTHORIZATION 350")
- cpp_quote("#define IXP_NNTP_PASSWORD_REQUIRED 381")
- cpp_quote("#define IXP_NNTP_NO_SUCH_NEWSGROUP 411")
- cpp_quote("#define IXP_NNTP_NO_NEXT_ARTICLE 421")
- cpp_quote("#define IXP_NNTP_NO_PREV_ARTICLE 422")
- cpp_quote("#define IXP_NNTP_NO_SUCH_ARTICLE_NUM 423")
- cpp_quote("#define IXP_NNTP_NO_SUCH_ARTICLE_FOUND 430")
- cpp_quote("#define IXP_NNTP_POSTING_NOT_ALLOWED 441")
- cpp_quote("#define IXP_NNTP_PROTOCOLS_SUPPORTED 485")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// RAS Errors")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#define IXP_S_RAS_NOT_NEEDED HR_S(0xCCC0)")
- cpp_quote("#define IXP_S_RAS_USING_CURRENT HR_S(0xCCC1)")
- cpp_quote("#define IXP_E_RAS_NOT_INSTALLED HR_E(0xCCC2)")
- cpp_quote("#define IXP_E_RAS_PROCS_NOT_FOUND HR_E(0xCCC3)")
- cpp_quote("#define IXP_E_RAS_ERROR HR_E(0xCCC4)")
- cpp_quote("#define IXP_E_RAS_INVALID_CONNECTOID HR_E(0xCCC5)")
- cpp_quote("#define IXP_E_RAS_GET_DIAL_PARAMS HR_E(0xCCC6)")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// IMAP Return Codes")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#define IXP_S_IMAP_UNRECOGNIZED_RESP HR_S(0xCCD0) // Did not recognize IMAP response CODE")
- cpp_quote("#define IXP_S_IMAP_VERBATIM_MBOX HR_S(0xCCE1) // Could not xlate mbox to target CP (or it's disabled): copying verbatim")
- cpp_quote("")
- cpp_quote("#define IXP_E_IMAP_LOGINFAILURE HR_E(0xCCD1) // LOGIN cmd failed")
- cpp_quote("#define IXP_E_IMAP_TAGGED_NO_RESPONSE HR_E(0xCCD2) // Received tagged NO response")
- cpp_quote("#define IXP_E_IMAP_BAD_RESPONSE HR_E(0xCCD3) // Received tagged BAD response")
- cpp_quote("#define IXP_E_IMAP_SVR_SYNTAXERR HR_E(0xCCD4) // Syntax error in svr response")
- cpp_quote("#define IXP_E_IMAP_NOTIMAPSERVER HR_E(0xCCD5) // This is not an IMAP server")
- cpp_quote("#define IXP_E_IMAP_BUFFER_OVERFLOW HR_E(0xCCD6) // Buffer overflow occurred")
- cpp_quote("#define IXP_E_IMAP_RECVR_ERROR HR_E(0xCCD7) // An error occurred in the recvr code")
- cpp_quote("#define IXP_E_IMAP_INCOMPLETE_LINE HR_E(0xCCD8) // Received incomplete line")
- cpp_quote("#define IXP_E_IMAP_CONNECTION_REFUSED HR_E(0xCCD9) // Received BYE on greeting")
- cpp_quote("#define IXP_E_IMAP_UNRECOGNIZED_RESP HR_E(0xCCDA) // Did not recognize IMAP response")
- cpp_quote("#define IXP_E_IMAP_CHANGEDUID HR_E(0xCCDB) // UID changed unexpectedly!")
- cpp_quote("#define IXP_E_IMAP_UIDORDER HR_E(0xCCDC) // UIDs not strictly ascending!")
- cpp_quote("#define IXP_E_IMAP_UNSOLICITED_BYE HR_E(0xCCDD) // Server issued UNSOLICITED BYE")
- cpp_quote("#define IXP_E_IMAP_IMPROPER_SVRSTATE HR_E(0xCCDE) // eg, Attempt to send FETCH before SELECT finishes")
- cpp_quote("#define IXP_E_IMAP_AUTH_NOT_POSSIBLE HR_E(0xCCDF) // No common authentication methods btwn client/svr")
- cpp_quote("#define IXP_E_IMAP_OUT_OF_AUTH_METHODS HR_E(0xCCE0) // We tried >= 1 auth method, no more left to try")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// HTTPMail Return Codes")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// http errors are discontiguous.")
- cpp_quote("#define IXP_E_HTTP_USE_PROXY HR_E(0xCC30) // http status 305")
- cpp_quote("#define IXP_E_HTTP_BAD_REQUEST HR_E(0xCC31) // http status 400")
- cpp_quote("#define IXP_E_HTTP_UNAUTHORIZED HR_E(0xCC32) // http status 401")
- cpp_quote("#define IXP_E_HTTP_FORBIDDEN HR_E(0xCC33) // http status 403")
- cpp_quote("#define IXP_E_HTTP_NOT_FOUND HR_E(0xCC34) // http status 404")
- cpp_quote("#define IXP_E_HTTP_METHOD_NOT_ALLOW HR_E(0xCC35) // http status 405")
- cpp_quote("#define IXP_E_HTTP_NOT_ACCEPTABLE HR_E(0xCC36) // http status 406")
- cpp_quote("#define IXP_E_HTTP_PROXY_AUTH_REQ HR_E(0xCC37) // http status 407")
- cpp_quote("#define IXP_E_HTTP_REQUEST_TIMEOUT HR_E(0xCC38) // http status 408")
- cpp_quote("#define IXP_E_HTTP_CONFLICT HR_E(0xCC39) // http status 409")
- cpp_quote("#define IXP_E_HTTP_GONE HR_E(0xCC3A) // http status 410")
- cpp_quote("#define IXP_E_HTTP_LENGTH_REQUIRED HR_E(0xCC3B) // http status 411")
- cpp_quote("#define IXP_E_HTTP_PRECOND_FAILED HR_E(0xCC3C) // http status 412")
- cpp_quote("#define IXP_E_HTTP_INTERNAL_ERROR HR_E(0xCC3D) // http status 500")
- cpp_quote("#define IXP_E_HTTP_NOT_IMPLEMENTED HR_E(0xCC3E) // http status 501")
- cpp_quote("#define IXP_E_HTTP_BAD_GATEWAY HR_E(0xCC3F) // http status 502")
- cpp_quote("// begin second range")
- cpp_quote("#define IXP_E_HTTP_SERVICE_UNAVAIL HR_E(0xCCF0) // http status 503")
- cpp_quote("#define IXP_E_HTTP_GATEWAY_TIMEOUT HR_E(0xCCF1) // http status 504")
- cpp_quote("#define IXP_E_HTTP_VERS_NOT_SUP HR_E(0xCCF2) // http status 505")
- cpp_quote("#define IXP_E_HTTP_INSUFFICIENT_STORAGE HR_E(0xCCF3) // http status 425 or 507")
- cpp_quote("#define IXP_E_HTTP_ROOT_PROP_NOT_FOUND HR_E(0xCCF4) // see IHTTPMailTransport::GetProperty")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// String Length Constants")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("")
- // ---------------------------------------------------------------------------------------
- // All of the transports in this file work in an asyncronous mode. It is assumed that
- // the client application has a message pump on the thread in which a transport object
- // is created.
- // ---------------------------------------------------------------------------------------
- // ---------------------------------------------------------------------------------------
- // String Lengths
- // ---------------------------------------------------------------------------------------
- const SHORT CCHMAX_DOMAIN = 256;
- const SHORT CCHMAX_PHONE_NUMBER = 128; // RAS_MaxPhoneNumber
- // ---------------------------------------------------------------------------------------
- // Default Port Numbers
- // ---------------------------------------------------------------------------------------
- const DWORD DEFAULT_IMAP_PORT = 143;
- const DWORD DEFAULT_POP3_PORT = 110;
- const DWORD DEFAULT_SMTP_PORT = 25;
- const DWORD DEFAULT_NNTP_PORT = 119;
- // ---------------------------------------------------------------------------------------
- // Internet Address Type
- //
- // There are only two address types because the SMTP protocol only distinguishes
- // between a sender (ADDR_FROM) and recipients. ADDR_TO should include all Bcc, Cc and
- // To recipients.
- //
- // additional DSN flags may be anded in and will result in a DSN request only if the
- // SMTP server supports DSNs (rfc1891) and the transport connected with an EHLO command
- // ---------------------------------------------------------------------------------------
- typedef enum tagINETADDRTYPE {
- ADDR_TO, // Recipient of the message (To, CC, Bcc, etc)
- ADDR_FROM, // Sender of the message
- ADDR_DSN_NEVER = 16, // suppress all delivery status notification
- ADDR_DSN_SUCCESS = 32, // request DSN on successful delivery
- ADDR_DSN_FAILURE = 64, // request DSN on delivery failure
- ADDR_DSN_DELAY = 128 // request DSN if delivery is delayed
- } INETADDRTYPE;
- const DWORD ADDR_TOFROM_MASK = 0x1; // INETADDRTYPE & ADDR_TOFROM_MASK gives raw type
- const DWORD ADDR_DSN_MASK = 0xf0;
- // ---------------------------------------------------------------------------------------
- // DSNRET
- // controls what whether full message or headers only will be returned with DSNs
- // ---------------------------------------------------------------------------------------
- typedef enum tagDSNRET {
- DSNRET_DEFAULT, // use SMTP server default
- DSNRET_HDRS, // return 822 headers only
- DSNRET_FULL, // return full message - headers + body
- } DSNRET;
-
- // ---------------------------------------------------------------------------------------
- // Internet Address
- // ---------------------------------------------------------------------------------------
- typedef struct tagINETADDR {
- INETADDRTYPE addrtype;
- CHAR szEmail[CCHMAX_EMAIL_ADDRESS]; // A person's e-mail address
- } INETADDR, *LPINETADDR;
- // ---------------------------------------------------------------------------------------
- // Internet Address List
- // ---------------------------------------------------------------------------------------
- typedef struct tagINETADDRLIST {
- ULONG cAddress; // Number of elements in prgInetAddr
- LPINETADDR prgAddress; // Array of internet addresses
- } INETADDRLIST, *LPINETADDRLIST;
- // -----------------------------------------------------------------------------------
- // RAS Connection Type
- // -----------------------------------------------------------------------------------
- typedef enum tagRASCONNTYPE {
- RAS_CONNECT_LAN,
- RAS_CONNECT_MANUAL,
- RAS_CONNECT_RAS
- } RASCONNTYPE;
- // -----------------------------------------------------------------------------------
- // HTTPMAIL Root Property Types
- // -----------------------------------------------------------------------------------
- typedef enum tagHTTPMAILPROPTYPE {
- HTTPMAIL_PROP_INVALID,
- HTTPMAIL_PROP_ADBAR,
- HTTPMAIL_PROP_CONTACTS,
- HTTPMAIL_PROP_INBOX,
- HTTPMAIL_PROP_OUTBOX,
- HTTPMAIL_PROP_SENDMSG,
- HTTPMAIL_PROP_SENTITEMS,
- HTTPMAIL_PROP_DELETEDITEMS,
- HTTPMAIL_PROP_DRAFTS,
- HTTPMAIL_PROP_MSGFOLDERROOT,
- HTTPMAIL_PROP_SIG,
- HTTPMAIL_PROP_LAST
- } HTTPMAILPROPTYPE;
- // -----------------------------------------------------------------------------------
- // HTTPMAIL Special Folder Types
- // -----------------------------------------------------------------------------------
- typedef enum tagHTTPMAILSPECIALFOLDER {
- HTTPMAIL_SF_NONE = 0,
- HTTPMAIL_SF_UNRECOGNIZED,
- HTTPMAIL_SF_INBOX,
- HTTPMAIL_SF_DELETEDITEMS,
- HTTPMAIL_SF_DRAFTS,
- HTTPMAIL_SF_OUTBOX,
- HTTPMAIL_SF_SENTITEMS,
- HTTPMAIL_SF_CONTACTS,
- HTTPMAIL_SF_CALENDAR,
- HTTPMAIL_SF_MSNPROMO,
- HTTPMAIL_SF_LAST
- } HTTPMAILSPECIALFOLDER;
- // -----------------------------------------------------------------------------------
- // HTTPMAIL Contact Types
- // -----------------------------------------------------------------------------------
- typedef enum tagHTTPMAILCONTACTTYPE {
- HTTPMAIL_CT_CONTACT = 0, // default
- HTTPMAIL_CT_GROUP,
- HTTPMAIL_CT_LAST
- } HTTPMAILCONTACTTYPE;
- // -----------------------------------------------------------------------------------
- // DAV Namespaces
- // -----------------------------------------------------------------------------------
- const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;
- const DWORD DAVNAMESPACE_DAV = 0;
- const DWORD DAVNAMESPACE_HOTMAIL = 1;
- const DWORD DAVNAMESPACE_HTTPMAIL = 2;
- const DWORD DAVNAMESPACE_MAIL = 3;
- const DWORD DAVNAMESPACE_CONTACTS = 4;
- // ---------------------------------------------------------------------------------------
- // Internet Server Flags...
- // ---------------------------------------------------------------------------------------
- cpp_quote("#define ISF_SMTP_USEIPFORHELO 0x00000001 // For HELO or EHLO Command")
- cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD 0x00000002 // For HELO or EHLO Command") // Never save password (boolean)
- cpp_quote("#define ISF_SSLONSAMEPORT 0x00000004 // For SMTP Only - use STARTTLS") // For STARTTLS Support
- cpp_quote("#define ISF_QUERYDSNSUPPORT 0x00000008 // For SMTP Only - issue EHLO on connect and check for DSN")
- cpp_quote("#define ISF_QUERYAUTHSUPPORT 0x00000010 // For SMTP Only - issue EHLO on connect and check for AUTH")
- // ---------------------------------------------------------------------------------------
- // Internet Server Information...
- // ---------------------------------------------------------------------------------------
- typedef struct INETSERVER {
- CHAR szAccount[CCHMAX_ACCOUNT_NAME]; // IMN Account Name
- CHAR szUserName[CCHMAX_USERNAME]; // User's connection name
- CHAR szPassword[CCHMAX_PASSWORD]; // User's password
- CHAR szServerName[CCHMAX_SERVER_NAME]; // Server name (or IP address string)
- CHAR szConnectoid[CCHMAX_CONNECTOID]; // RAS Connection Name
- RASCONNTYPE rasconntype; // RAS connection type
- DWORD dwPort; // Port name
- BOOL fSSL; // Using SSL
- BOOL fTrySicily; // Try using sicily authentication
- DWORD dwTimeout; // Timeout in seconds
- DWORD dwFlags; // ISF_xxx Flags (above)
- } INETSERVER, *LPINETSERVER;
- // -----------------------------------------------------------------------------------
- // Internet Transport Types
- // -----------------------------------------------------------------------------------
- typedef enum tagIXPTYPE {
- IXP_NNTP, // NNTP (News)
- IXP_SMTP, // SMTP (Send)
- IXP_POP3, // POP3 (Recv)
- IXP_IMAP, // IMAP (Recv / remote store)
- IXP_RAS,
- IXP_HTTPMail // HTTPMail (Recv / remote store)
- } IXPTYPE;
- // -----------------------------------------------------------------------------------
- // IXPSTATUS - Transport Status Types
- //
- // These values are returned in the ITransportCallback::OnStatus callback method
- // and in the IInternetTransport::GetStatus member.
- // -----------------------------------------------------------------------------------
- typedef enum tagIXPSTATUS
- {
- IXP_FINDINGHOST, // Attempting to find host (IP/host name resolution)
- IXP_CONNECTING, // TCP/IP connection is in progress
- IXP_SECURING, // TCP/IP socket connection has been established, securing an SSL connection
- IXP_CONNECTED, // TCP/IP socket connection has been established, waiting for protcol response
- IXP_AUTHORIZING, // Performing authorization with the server
- IXP_AUTHRETRY, // Retrying authorization
- IXP_AUTHORIZED, // Authorization successful (transient state, heads directly to IXP_CONNECTED after)
- IXP_DISCONNECTING, // The connection is being closed
- IXP_DISCONNECTED, // The transport has been disconnected from the server
- IXP_LAST // Last status value (for boundschecking purposes)
- } IXPSTATUS;
- // DEPTH_INFINITY : this constant can be passed to any member of IHTTPMailTransport
- // that takes a DWORD parameter to specify depth in a propfind request.
- const DWORD DEPTH_INFINITY = 0xFFFFFFFE;
- // IHTTPMailTransport::MemberInfo Flags.
- typedef DWORD MEMBERINFOFLAGS;
- const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x00000000;
- const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x00000001; // common props and folder props
- const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x00000002; // common props and message props
- const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = (HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS);
- // ***NB: You have to be careful when changing IMAP_MSGFLAGS.
- // The function, IMAPMsgFlagsToARF in imapfldr.cpp will have to be updated.
- typedef DWORD IMAP_MSGFLAGS; // Message flags returned by FLAGS response,
- // PERMANENTFLAGS response code and FETCH
- const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00000000;
- const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x00000001;
- const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x00000002;
- const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x00000004;
- const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x00000008;
- const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x00000010;
- const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x0000001F; // Keep this updated
- // ---------------------------------------------------------------------------------------
- // IID_ITransportCallbackService
- // ---------------------------------------------------------------------------------------
- [
- uuid(CA30F3FF-C9AC-11d1-9A3A-00C04FA309D4),
- local,
- ]
- interface ITransportCallbackService : IUnknown
- {
- HRESULT GetParentWindow(
- [in] DWORD dwReserved,
- [out] HWND *phwndParent);
- HRESULT GetAccount(
- [out] LPDWORD pdwServerType, // SRV_xxx Bit
- [out] IImnAccount **ppAccount);
- }
- // ---------------------------------------------------------------------------------------
- // IID_ITransportCallback
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7E1-3435-11d0-81D0-00C04FD85AB4),
- helpstring("Base Transport Callback Interface"),
- local,
- ]
- interface ITransportCallback : IUnknown
- {
- // -----------------------------------------------------------------------------------
- // IXPRESULT
- //
- // This structure holds information about a server response or a transport result /
- // error.
- // -----------------------------------------------------------------------------------
- typedef struct tagIXPRESULT {
- HRESULT hrResult; // Error Code
- LPSTR pszResponse; // Last server response
- UINT uiServerError; // Server generated error number
- HRESULT hrServerError; // Associated HRESULT of server error
- DWORD dwSocketError; // Socket error as defined in winsock.h
- LPSTR pszProblem; // Additional information
- } IXPRESULT, *LPIXPRESULT;
- // -----------------------------------------------------------------------------------
- // OnTimeout
- //
- // Description:
- // This method is called by a transport when a timeout period has expired. A timeout
- // is defined as a period of time in which no activity has occurred. A client
- // can specify a timeout in the INETSERVER structure that is passed to the
- // IInternetTransport::Connect method.
- //
- // When this method is called, the client MUST return a value that indicates
- // whether the transport should wait another dwTimeout (seconds), or should
- // terminate the connection to the server.
- //
- // Parameters:
- // pdwTimeout Specifies the current timeout value in seconds. A
- // client can reset this value to a new timeout value,
- // and return S_OK in which case the client will
- // continue waiting for the new timeout period.
- // pTransport The transport that generated the timeout
- //
- // Returns:
- // S_OK Tells the transport to wait another timeout period
- // as specified by the value of *pdwTimeout (seconds).
- // S_FALSE Tells the transport to terminate it's connection and
- // return to the disconnected state.
- //
- // -----------------------------------------------------------------------------------
- HRESULT OnTimeout(
- [in,out]
- DWORD *pdwTimeout,
- [in]
- IInternetTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnLogonPrompt
- //
- // Description:
- // This method is called when the transport requires logon information. The client
- // is expected to prompt the user and fill the szUserName, szPassword fields of
- // the INETSERVER structure passed in. The client should not attempt to change
- // any other fields in this structure, they should be used only for display.
- //
- // Parameters:
- // pInetServer Information about the current internet server.
- // pTransport The transport that generated the timeout
- //
- // Returns:
- // S_OK The user entered new logon information and the
- // transport should try to re-connect.
- // S_FALSE The user wants to cancel the current logon attempt.
- // If this value is returned, the transport returns
- // to the disconnected state.
- //
- // -----------------------------------------------------------------------------------
- HRESULT OnLogonPrompt(
- [in,out]
- LPINETSERVER pInetServer,
- [in]
- IInternetTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnPrompt
- //
- // Description:
- // This method is called when the transport requires user input. This method is called
- // in the following cases:
- //
- // 1) hrError == IXP_E_INVALID_CERT_CN, Invalid certificate, SSL error
- // 2) hrError == IXP_E_INVALID_CERT_DATE, Invalid certificate date, SSL error
- //
- // Parameters:
- // hrError HRESULT of reason for user prompt, usually an error
- // pszText Suggested text of question to be displayed
- // pszCaption Suggested caption of messagebox
- // uType Same parameter as passed into MessageBox (Yes, no, etc)
- // pTransport The transport object that generated the OnPrompt
- //
- // Returns
- // INT This method should return the same value as the
- // standard windows MessageBox API function.
- //
- // -----------------------------------------------------------------------------------
- INT OnPrompt(
- [in]
- HRESULT hrError,
- [in]
- LPCTSTR pszText,
- [in]
- LPCTSTR pszCaption,
- [in]
- UINT uType,
- [in]
- IInternetTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnStatus
- //
- // Description:
- // This method is called to allow the client to provide a user with a high level
- // progress indicator.
- //
- // Parameters:
- // ixpstatus Current status of the transport, described above
- // pTransport Transport object that generated the OnStatus call
- //
- // Returns:
- // HRESULT A client should always return S_OK
- //
- // -----------------------------------------------------------------------------------
- HRESULT OnStatus(
- [in]
- IXPSTATUS ixpstatus,
- [in]
- IInternetTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnError
- //
- // Description:
- // This method is called when a transport encounters a fatal error that will most
- // likely result is a disconnection from the server. Normal protocol errors are
- // returned through each transports OnResponse metho. This method is used to handle
- // high-level errors such eas TCP/IP and connection failures.
- //
- // Parameters:
- // ixpstatus Current status of the transport (described above)
- // pResult Error information
- // pTransport Transport object that generated the OnError call
- //
- // Return Values:
- // HRESULT A client should always return S_OK
- //
- // -----------------------------------------------------------------------------------
- HRESULT OnError(
- [in]
- IXPSTATUS ixpstatus,
- [in]
- LPIXPRESULT pResult,
- [in]
- IInternetTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnCommand
- //
- // Description:
- // This method is called for every command send to the server and for every respsonse
- // received from the server. This method is provided ONLY for logging and debugging
- // purposes. If you pass FALSE for fCommandLogging in the call to
- // IInternetTransport::Connect, this method will not be called. There is a small
- // amount of overhead when this function is called.
- //
- // Parameters:
- // cmdtype Is this a Send Line or a Response Line
- // pszLine Data send to or received from the server
- // hrResponse HRESULT of response code (see codes above). If this
- // is a failure code, then it indicates that the
- // transport just received an error from the server
- // and the current operation is going to fail, possible.
- // pTransport Transport that generated the call to OnCommand
- //
- // Returns:
- // S_OK The client should always return S_OK
- //
- // -----------------------------------------------------------------------------------
- typedef enum tagCMDTYPE {
- CMD_SEND,
- CMD_RESP
- } CMDTYPE;
- HRESULT OnCommand(
- [in]
- CMDTYPE cmdtype,
- [in]
- LPSTR pszLine,
- [in]
- HRESULT hrResponse,
- [in]
- IInternetTransport *pTransport);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IInternetTransport
- // ---------------------------------------------------------------------------------------
- [
- uuid(1F636C01-364E-11d0-81D3-00C04FD85AB4),
- helpstring("Internet Transport Interface"),
- local,
- ]
- interface IInternetTransport : IUnknown
- {
- // Interface Constants
- const boolean iitAUTHENTICATE = TRUE;
- const boolean iitDONT_AUTHENTICATE = FALSE;
- const boolean iitENABLE_ONCOMMAND = TRUE;
- const boolean iitDISABLE_ONCOMMAND = FALSE;
- // -----------------------------------------------------------------------------------
- // GetServerInfo
- //
- // Description:
- // Allows the client to retreive server information for the transport. The data in
- // this structure is valid only after a call to IInternetTransport::Connect.
- //
- // Parameters:
- // pInetServer Current server information for the transport
- //
- // Returns:
- // E_INVALIDARG pInetServer is NULL
- //
- // -----------------------------------------------------------------------------------
- HRESULT GetServerInfo(
- [in,out]
- LPINETSERVER pInetServer);
- // -----------------------------------------------------------------------------------
- // GetIXPType
- //
- // Description:
- // This method returns the IXPTYPE of the transport.
- //
- // Parameters:
- // None
- //
- // Returns:
- // IXPTYPE Internet Transport Type
- //
- // -----------------------------------------------------------------------------------
- IXPTYPE GetIXPType(void);
- // -----------------------------------------------------------------------------------
- // IsState
- //
- // Description:
- // This method allows a client to query the transport for validity of different states.
- //
- // Parameters:
- // isstate The State in which to query
- //
- // Returns:
- // IXP_E_NOT_INIT The transport has not been initialized
- // IXP_E_NOT_CONNECTED The transport is not connected (return if isstate != IXP_IS_CONNECTED)
- // S_OK The IXP_IS_xxx state is true
- // S_FALSE The IXP_IS_xxx state is false
- //
- // -----------------------------------------------------------------------------------
- typedef enum tagIXPISSTATE {
- IXP_IS_CONNECTED, // Is the transport currently connected
- IXP_IS_BUSY, // Is the transport currently processing a command
- IXP_IS_READY, // Is the transport ready for input
- IXP_IS_AUTHENTICATED, // Has the transport performed authentication
- } IXPISSTATE;
- HRESULT IsState(
- [in]
- IXPISSTATE isstate);
- // -----------------------------------------------------------------------------------
- // InetServerFromAccount
- //
- // Description:
- // This method takes an Internet Mail and News Account object and returns a filled
- // INETSERVER structure.
- //
- // Parameters:
- // pAccount Internet Mail and News Account
- // pInetServer Upon successful return contains server information
- // required to call IInternetTransport::Connect.
- //
- // Return Values:
- // E_INVALIDARG pAccount is NULL or pInetServer is NULL
- //
- // -----------------------------------------------------------------------------------
- HRESULT InetServerFromAccount(
- [in]
- IImnAccount *pAccount,
- [in,out]
- LPINETSERVER pInetServer);
- // -----------------------------------------------------------------------------------
- // Connect
- //
- // Description:
- // Connects the transport to the server specified in pInetServer struct. This call
- // is asyncronous. Each transport defines that terminal connect state. For example,
- // for SMTP, the connect state (::Connect is done) is defined by the SMTP_CONNECTED,
- // state.
- //
- // Parameters:
- // pInetServer Internet Server connection information.
- // fAuthenticate Tells the transport whether of or not to perform
- // authentication with the server. If you client
- // passes FALSE, it is responsible for authentication.
- // fCommandLogging If you pass FALSE, the ITransportCallback::OnCommand
- // method will never be called.
- //
- // Returns:
- // E_INVALIDARG pInetServer is NULL, or a member of it is invalid
- // E_OUTOFMEMORY An memory allocation failed
- // E_FAIL Socket initialization or connection failed.
- // IXP_E_ALREADY_CONNECTED The transport is currently connected and busy
- // IXP_E_NOT_INIT The transport has not been Initialized
- // IXP_E_SOCKET_INIT_ERROR Unable to initilize the TCP/IP socket connection
- // IXP_E_SOCKET_CONNECT_ERROR Unable to connect the TCP/IP socket
- //
- // In general this function succeeds, even if the server does not exist. If the
- // server can not be found, the client will receive error information through
- // ITransportCallback::OnError, and the terminal connection state can be detected
- // when ITransportCallback::OnStatus(IXP_DISCONNECTED) is called.
- //
- // -----------------------------------------------------------------------------------
- HRESULT Connect(
- [in]
- LPINETSERVER pInetServer,
- [in]
- boolean fAuthenticate,
- [in]
- boolean fCommandLogging);
- // -----------------------------------------------------------------------------------
- // HandsOffCallback
- //
- // Description:
- // This method forces the Transport to release the callback interface that was
- // passed into the InitNew method of the transport. After this method is called,
- // no more calls will be made to the callback function. This method is provided
- // so that clients can resolve possible circurlar references.
- //
- // Parameters:
- // None
- //
- // Returns:
- // S_OK The callback was release
- // S_FALSE There is currently no callback registered
- //
- // -----------------------------------------------------------------------------------
- HRESULT HandsOffCallback(void);
- // -----------------------------------------------------------------------------------
- // Disconnect
- //
- // Description:
- // This method disconnects the transport. This method may cause the transport to
- // send a command, such as the QUIT command, to the server. This is the clean
- // method of terminating the connection to the server, as opposed to DropConnection.
- //
- // Parameters:
- // None
- //
- // Returns:
- // S_OK The connection has been dropped.
- // IXP_E_NOT_INIT The transport has not been Initialized
- // IXP_E_NOT_CONNECTED The transport is not connected.
- //
- // -----------------------------------------------------------------------------------
- HRESULT Disconnect(void);
- // -----------------------------------------------------------------------------------
- // DropConnection
- //
- // Description:
- // This method disconnects the transport. This is an un-clean way, but guaranteed
- // method of dropping the connection between the client and the server. To allow
- // the protocol to shutdown in a normal fashion, call Disconnect.
- //
- // Parameters:
- // None
- //
- // Returns:
- // S_OK The connection has been dropped.
- // IXP_E_NOT_INIT The transport has not been Initialized
- // IXP_E_NOT_CONNECTED The transport is not connected.
- //
- // -----------------------------------------------------------------------------------
- HRESULT DropConnection(void);
- // -----------------------------------------------------------------------------------
- // GetStatus
- //
- // Description:
- // This function returns the current status of the transport.
- //
- // Parameters:
- // IXPSTATUS *pCurrentStatus [out] - current status of the transport is returned here.
- //
- // Returns:
- // HRESULT indicating success or failure.
- // -----------------------------------------------------------------------------------
- HRESULT GetStatus([out]IXPSTATUS *pCurrentStatus);
- }
- // ---------------------------------------------------------------------------------------
- // IID_ISMTPCallback
- // ---------------------------------------------------------------------------------------
- [
- uuid(1F636C02-364E-11d0-81D3-00C04FD85AB4),
- helpstring("SMTP Callback Interface"),
- local,
- ]
- interface ISMTPCallback : ITransportCallback
- {
- // -----------------------------------------------------------------------------------
- // SMTPCOMMAND
- // -----------------------------------------------------------------------------------
- typedef enum tagSMTPCOMMAND {
- SMTP_NONE,
- SMTP_BANNER,
- SMTP_CONNECTED,
- SMTP_SEND_MESSAGE,
- SMTP_AUTH,
- SMTP_EHLO,
- SMTP_HELO,
- SMTP_MAIL,
- SMTP_RCPT,
- SMTP_RSET,
- SMTP_QUIT,
- SMTP_DATA,
- SMTP_DOT,
- SMTP_SEND_STREAM,
- SMTP_CUSTOM
- } SMTPCOMMAND;
- // -----------------------------------------------------------------------------------
- // SMTPSTREAM return OnResponse - command == SMTP_SEND_STREAM
- // -----------------------------------------------------------------------------------
- typedef struct tagSMTPSTREAM {
- DWORD cbIncrement;
- DWORD cbCurrent;
- DWORD cbTotal;
- } SMTPSTREAM, *LPSMTPSTREAM;
- // -----------------------------------------------------------------------------------
- // SMTPRESPONSE
- //
- // Description:
- // command SMTPCOMMAND that generated the response
- // fDone Is the command finished. If TRUE, the client
- // can issue another command through ISMTPTransport,
- // otherwise, the client should continue to pump
- // messages until fDone = TRUE is received.
- // rIxpResult Result Information for the response. If
- // rIxpResult::hrResult specifies a FAILED result,
- // the structure contains other information.
- // pTransport Transport that generated the OnResponse call.
- //
- // -----------------------------------------------------------------------------------
- typedef struct tagSMTPRESPONSE {
- SMTPCOMMAND command; // Command in which the response was generated for
- BOOL fDone; // Is this an SMTP continuation response?
- IXPRESULT rIxpResult; // Result Information
- ISMTPTransport *pTransport; // Pointer to the SMTP transport that generated the response
- // This is a union of response information based on the command
- [switch_type(SMTPCOMMAND), switch_is((SMTPCOMMAND)command)]
- union {
- [case(SMTP_SEND_STREAM)] SMTPSTREAM rStreamInfo;
- [default];
- };
- } SMTPRESPONSE, *LPSMTPRESPONSE;
- // -----------------------------------------------------------------------------------
- // OnResponse
- //
- // Description:
- // Called by ISMTPTransport when a command response is received from the SMTP server.
- //
- // Parameters:
- // pResponse Response information
- //
- // Return Values:
- // S_OK The client should always return S_OK
- //
- // -----------------------------------------------------------------------------------
- HRESULT OnResponse(
- [in]
- LPSMTPRESPONSE pResponse);
- }
- // ---------------------------------------------------------------------------------------
- // IID_ISMTPTransport
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7E2-3435-11d0-81D0-00C04FD85AB4),
- helpstring("SMTP Transport Interface"),
- local,
- ]
- interface ISMTPTransport : IInternetTransport
- {
- // -----------------------------------------------------------------------------------
- // SMTPMESSAGE
- // -----------------------------------------------------------------------------------
- typedef struct tagSMTPMESSAGE {
- ULONG cbSize; // Size of the message in bytes
- LPSTREAM pstmMsg; // Stream containing ANSI MIME/rfc822 message stream
- INETADDRLIST rAddressList; // Internet Address List containing sender and recipients
- } SMTPMESSAGE, *LPSMTPMESSAGE;
- // -----------------------------------------------------------------------------------
- // InitNew
- //
- // Description:
- // This method Initializes the internet transport. This method be called before
- // the transport can doing anything.
- //
- // Parameters:
- // pszLogFilePath Full file path in which to log the protocol commands.
- // NULL is a valid value (no logging)
- // pCallback(required) Specifies the Transport callback interface.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT InitNew(
- [in]
- LPSTR pszLogFilePath,
- [in]
- ISMTPCallback *pCallback);
- // -----------------------------------------------------------------------------------
- // SendMessage
- //
- // Description:
- // This method initiates the sending process. IInternetTransport::Connect must have
- // been called before this method is called (i.e. the transport must be in the
- // ready state). This method calls OnProgress throughout the transmission of
- // pMessage->pstmMsg so that the client can display progress. When the message is
- // fisnished, or if an error ocurrs, ITransportCallback::OnComplete is called.
- //
- // Parameters:
- // pMessage(required) Contains the information for the message to send. This
- // method duplicates the contents of pMessage and AddRefs,
- // pMessage->pstmMsg so that the client can free pMessage
- // immediately after calling this method.
- //
- // Returns:
- // E_INVALIDARG pMessage is invalid or one of its members is invalid
- // E_OUTOFMEMORY A memory allocation failed
- // IXP_E_BUSY The transport is busy
- // IXP_E_INVALID_ADDRESS_LIST SMTPMESSAGE::rInetAddrList contains invalid entries
- // IXP_E_NOT_CONNECTED IInternetTransport::Connect has not been called, or
- // the current connection has been lost. The transport
- // will not automatically re-connect.
- //
- // -----------------------------------------------------------------------------------
- HRESULT SendMessage(
- [in]
- LPSMTPMESSAGE pMessage);
- // -----------------------------------------------------------------------------------
- // CommandMAIL
- // -----------------------------------------------------------------------------------
- HRESULT CommandMAIL(
- [in]
- LPSTR pszEmailFrom);
- // -----------------------------------------------------------------------------------
- // CommandRCPT
- // -----------------------------------------------------------------------------------
- HRESULT CommandRCPT(
- [in]
- LPSTR pszEmailTo);
- // -----------------------------------------------------------------------------------
- // CommandEHLO
- // -----------------------------------------------------------------------------------
- HRESULT CommandEHLO(void);
- // -----------------------------------------------------------------------------------
- // CommandHELO
- // -----------------------------------------------------------------------------------
- HRESULT CommandHELO(void);
- // -----------------------------------------------------------------------------------
- // CommandHELO
- // -----------------------------------------------------------------------------------
- HRESULT CommandAUTH(
- [in]
- LPSTR pszAuthType);
- // -----------------------------------------------------------------------------------
- // CommandQUIT
- // -----------------------------------------------------------------------------------
- HRESULT CommandQUIT(void);
- // -----------------------------------------------------------------------------------
- // CommandRSET
- // -----------------------------------------------------------------------------------
- HRESULT CommandRSET(void);
- // -----------------------------------------------------------------------------------
- // CommandDATA
- // -----------------------------------------------------------------------------------
- HRESULT CommandDATA(void);
- // -----------------------------------------------------------------------------------
- // CommandDOT
- // -----------------------------------------------------------------------------------
- HRESULT CommandDOT(void);
- // -----------------------------------------------------------------------------------
- // SendDataStream - This method does a CommandDOT when it is finished.
- // -----------------------------------------------------------------------------------
- HRESULT SendDataStream(
- [in]
- IStream *pStream,
- [in]
- ULONG cbSize);
- }
- // ---------------------------------------------------------------------------------------
- // IID_ISMTPTransport2
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7EC-3435-11d0-81D0-00C04FD85AB4),
- helpstring("SMTP Transport Interface"),
- local,
- ]
- interface ISMTPTransport2 : ISMTPTransport
- {
- // -----------------------------------------------------------------------------------
- // SMTPMESSAGE2
- //
- // Adds DSN (rfc1891) support. To receive DSNs the SMTP server must implement rfc1891
- // and the SMTP transport must be initialized with an EHLO command
- // -----------------------------------------------------------------------------------
- typedef struct tagSMTPMESSAGE2 {
- SMTPMESSAGE smtpMsg; // SMTPMESSAGE structure
- LPSTR pszDSNENVID; // value for MAIL ENVID paramter
- DSNRET dsnRet; // value for MAIL RET parameter
- DWORD dwReserved;
- DWORD dwReserved2;
- } SMTPMESSAGE2, *LPSMTPMESSAGE2;
- //***************************************************************************
- // Function: SetWindow
- //
- // Purpose:
- // This function creates a new window for async winsock processing
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT SetWindow(void);
- //***************************************************************************
- // Function: ResetWindow
- //
- // Purpose:
- // This function closes a window for async winsock processing
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT ResetWindow(void);
- // -----------------------------------------------------------------------------------
- // SendMessage2
- //
- // Description:
- // This method initiates the sending process. IInternetTransport::Connect must have
- // been called before this method is called (i.e. the transport must be in the
- // ready state). This method calls OnProgress throughout the transmission of
- // pMessage->pstmMsg so that the client can display progress. When the message is
- // fisnished, or if an error ocurrs, ITransportCallback::OnComplete is called.
- //
- // Parameters:
- // pMessage(required) Contains the information for the message to send. This
- // method duplicates the contents of pMessage and AddRefs,
- // pMessage->pstmMsg so that the client can free pMessage
- // immediately after calling this method.
- //
- // Returns:
- // E_INVALIDARG pMessage is invalid or one of its members is invalid
- // E_OUTOFMEMORY A memory allocation failed
- // IXP_E_BUSY The transport is busy
- // IXP_E_INVALID_ADDRESS_LIST SMTPMESSAGE::rInetAddrList contains invalid entries
- // IXP_E_NOT_CONNECTED IInternetTransport::Connect has not been called, or
- // the current connection has been lost. The transport
- // will not automatically re-connect.
- //
- // -----------------------------------------------------------------------------------
- HRESULT SendMessage2(
- [in]
- LPSMTPMESSAGE2 pMessage);
- // -----------------------------------------------------------------------------------
- // CommandRCPT2
- // -----------------------------------------------------------------------------------
- HRESULT CommandRCPT2(
- [in]
- LPSTR pszEmailTo,
- [in]
- INETADDRTYPE atDSN);
- }
-
- // ---------------------------------------------------------------------------------------
- // IID_IDAVNamespaceArbiter
- // ---------------------------------------------------------------------------------------
- [
- uuid(72A58FF8-227D-11d2-A8B5-0000F8084F96),
- helpstring("DAV Namespace Arbiter"),
- local,
- ]
- interface IDAVNamespaceArbiter : IUnknown
- {
- HRESULT AddNamespace(
- [in]
- LPCSTR pszNamespace,
- [out]
- DWORD *pdwNamespaceID);
-
- HRESULT GetNamespaceID(
- [in]
- LPCSTR pszNamespace,
- [out]
- DWORD *pdwNamespaceID);
- HRESULT GetNamespacePrefix(
- [in]
- DWORD dwNamespaceID,
- [out]
- LPSTR *ppszNamespacePrefix);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IPropPatchRequest
- // ---------------------------------------------------------------------------------------
- [
- uuid(AB8B8D2A-227F-11d2-A8B5-0000F8084F96),
- helpstring("DAV PropPatch Request"),
- local,
- ]
- interface IPropPatchRequest : IDAVNamespaceArbiter
- {
- HRESULT SetProperty(
- [in]
- DWORD dwNamespaceID,
- [in]
- LPCSTR pszPropertyName,
- [in]
- LPCSTR pszNewValue);
- HRESULT RemoveProperty(
- [in]
- DWORD dwNamespaceID,
- [in]
- LPCSTR pszPropertyName);
- HRESULT GenerateXML(
- [out]
- LPSTR *pszXML);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IPropFindRequest
- // ---------------------------------------------------------------------------------------
- [
- uuid(5CFC6308-0544-11d2-A894-0000F8084F96),
- helpstring("DAV PropFind Request"),
- local,
- ]
- interface IPropFindRequest : IDAVNamespaceArbiter
- {
- HRESULT AddProperty(
- [in]
- DWORD dwNamespaceID,
- [in]
- LPCSTR pszPropertyName);
-
- HRESULT GenerateXML(
- [out]
- LPSTR *pszXML);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IPropFindMultiResponse
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DEE87DE-0547-11d2-A894-0000F8084F96),
- helpstring("DAV PropFind MultiResponse"),
- local,
- ]
- interface IPropFindMultiResponse : IUnknown
- {
- BOOL IsComplete(void);
- HRESULT GetLength(
- [out]
- ULONG *pulLength);
- HRESULT GetResponse(
- [in]
- ULONG ulIndex,
- [out]
- IPropFindResponse **ppResponse);
- }
-
- // ---------------------------------------------------------------------------------------
- // IID_IPropFindResponse
- // ---------------------------------------------------------------------------------------
- [
- uuid(8A523716-0548-11d2-A894-0000F8084F96),
- helpstring("DAV PropFind Response"),
- local,
- ]
- interface IPropFindResponse : IUnknown
- {
- BOOL IsComplete(void);
- HRESULT GetHref(
- [out]
- LPSTR *ppszHref);
- HRESULT GetProperty(
- [in]
- DWORD dwNamespaceID,
- [in]
- LPCSTR pszPropertyName,
- [out]
- LPSTR *ppszPropertyValue);
- }
-
- // ---------------------------------------------------------------------------------------
- // IID_IHTTPMailCallback
- // ---------------------------------------------------------------------------------------
- [
- uuid(19F6481C-E5F0-11d1-A86E-0000F8084F96),
- helpstring("HTTPMail Callback Interface"),
- local,
- ]
- interface IHTTPMailCallback : ITransportCallback
- {
-
- // -----------------------------------------------------------------------------------
- // HTTPMAILCOMMAND
- // -----------------------------------------------------------------------------------
- typedef enum tagHTTPMAILCOMMAND
- {
- HTTPMAIL_NONE,
- HTTPMAIL_GETPROP,
- HTTPMAIL_GET,
- HTTPMAIL_PUT,
- HTTPMAIL_POST,
- HTTPMAIL_DELETE,
- HTTPMAIL_BDELETE,
- HTTPMAIL_PROPFIND,
- HTTPMAIL_PROPPATCH,
- HTTPMAIL_MKCOL,
- HTTPMAIL_COPY,
- HTTPMAIL_BCOPY,
- HTTPMAIL_MOVE,
- HTTPMAIL_BMOVE,
- HTTPMAIL_MEMBERINFO,
- HTTPMAIL_FINDFOLDERS,
- HTTPMAIL_MARKREAD,
- HTTPMAIL_SENDMESSAGE,
- HTTPMAIL_LISTCONTACTS,
- HTTPMAIL_CONTACTINFO,
- HTTPMAIL_POSTCONTACT,
- HTTPMAIL_PATCHCONTACT
- } HTTPMAILCOMMAND;
- // -----------------------------------------------------------------------------------
- // HTTPMAILGETPROP
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILGETPROP
- {
- HTTPMAILPROPTYPE type;
- LPSTR pszProp;
- } HTTPMAILGETPROP, *LPHTTPMAILGETPROP;
- // -----------------------------------------------------------------------------------
- // HTTPMAILGET
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILGET
- {
- BOOL fTotalKnown; // server provided a content-length (cbTotal is valid)
- DWORD cbIncrement; // bytes in this response
- DWORD cbCurrent; // bytes downloaded so far
- DWORD cbTotal; // total bytes in the response (if fTotalKnown == TRUE)
- LPVOID pvBody; // content bytes
- LPSTR pszContentType;
- } HTTPMAILGET, *LPHTTPMAILGET;
- // -----------------------------------------------------------------------------------
- // HTTPMAILPOST
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILPOST
- {
- LPSTR pszLocation;
- BOOL fResend;
- DWORD cbIncrement;
- DWORD cbCurrent;
- DWORD cbTotal;
- } HTTPMAILPOST, *LPHTTPMAILPOST;
- // -----------------------------------------------------------------------------------
- // HTTPMAILPROPFIND
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILPROPFIND
- {
- IPropFindMultiResponse *pMultiResponse; // parsed propfind response
- } HTTPMAILPROPFIND, *LPHTTPMAILPROPFIND;
- // -----------------------------------------------------------------------------------
- // HTTPMAILLOCATION
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILLOCATION
- {
- LPSTR pszLocation;
- } HTTPMAILLOCATION, *LPHTTPMAILLOCATION;
- // -----------------------------------------------------------------------------------
- // HTTPMAILBCOPYMOVE
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILBCOPYMOVE
- {
- LPSTR pszHref;
- LPSTR pszLocation;
- HRESULT hrResult;
- } HTTPMAILBCOPYMOVE, *LPHTTPMAILBCOPYMOVE;
- // -----------------------------------------------------------------------------------
- // HTTPMAILBCOPYMOVELIST
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILBCOPYMOVELIST
- {
- ULONG cBCopyMove;
- LPHTTPMAILBCOPYMOVE prgBCopyMove;
- } HTTPMAILBCOPYMOVELIST, *LPHTTPMAILBCOPYMOVELIST;
- // -----------------------------------------------------------------------------------
- // HTTPMAILMEMBERINFO
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMEMBERINFO
- {
- // common properties
- LPSTR pszHref;
- BOOL fIsFolder;
- // folder properties
- LPSTR pszDisplayName;
- BOOL fHasSubs;
- BOOL fNoSubs;
- DWORD dwUnreadCount;
- DWORD dwVisibleCount;
- HTTPMAILSPECIALFOLDER tySpecial;
- // message properties
- BOOL fRead;
- BOOL fHasAttachment;
- LPSTR pszTo;
- LPSTR pszFrom;
- LPSTR pszSubject;
- LPSTR pszDate;
- DWORD dwContentLength;
- } HTTPMEMBERINFO, *LPHTTPMEMBERINFO;
- // -----------------------------------------------------------------------------------
- // HTTPMEMBERINFOLIST
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMEMBERINFOLIST
- {
- ULONG cMemberInfo; // count of elements in prgMemberInfo
- LPHTTPMEMBERINFO prgMemberInfo; // array of HTTPMEMBERINFO
- } HTTPMEMBERINFOLIST, *LPHTTPMEMBERINFOLIST;
- // -----------------------------------------------------------------------------------
- // HTTPMEMBERERROR
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMEMBERERROR
- {
- LPSTR pszHref;
- HRESULT hrResult;
- } HTTPMEMBERERROR, *LPHTTPMEMBERERROR;
- // -----------------------------------------------------------------------------------
- // HTTPMEMBERERRORLIST
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMEMBERERRORLIST
- {
- ULONG cMemberError;
- LPHTTPMEMBERERROR prgMemberError;
- } HTTPMEMBERERRORLIST, *LPHTTPMEMBERERRORLIST;
- // -----------------------------------------------------------------------------------
- // HTTPCONTACTID
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPCONTACTID
- {
- LPSTR pszHref;
- LPSTR pszId;
- HTTPMAILCONTACTTYPE tyContact;
- LPSTR pszModified;
- } HTTPCONTACTID, *LPHTTPCONTACTID;
- // -----------------------------------------------------------------------------------
- // HTTPCONTACTIDLIST
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPCONTACTIDLIST
- {
- ULONG cContactId; // number of elements in prgContactId
- LPHTTPCONTACTID prgContactId; // array cf contact ids
- } HTTPCONTACTIDLIST, *LPHTTPCONTACTIDLIST;
- // -----------------------------------------------------------------------------------
- // HTTPCONTACTINFO
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPCONTACTINFO
- {
- LPSTR pszHref;
- LPSTR pszId;
- HTTPMAILCONTACTTYPE tyContact;
- LPSTR pszModified;
- LPSTR pszDisplayName;
- LPSTR pszGivenName;
- LPSTR pszSurname;
- LPSTR pszNickname;
- LPSTR pszEmail;
- LPSTR pszHomeStreet;
- LPSTR pszHomeCity;
- LPSTR pszHomeState;
- LPSTR pszHomePostalCode;
- LPSTR pszHomeCountry;
- LPSTR pszCompany;
- LPSTR pszWorkStreet;
- LPSTR pszWorkCity;
- LPSTR pszWorkState;
- LPSTR pszWorkPostalCode;
- LPSTR pszWorkCountry;
- LPSTR pszHomePhone;
- LPSTR pszHomeFax;
- LPSTR pszWorkPhone;
- LPSTR pszWorkFax;
- LPSTR pszMobilePhone;
- LPSTR pszOtherPhone;
- LPSTR pszBday;
- LPSTR pszPager;
- } HTTPCONTACTINFO, *LPHTTPCONTACTINFO;
-
- // -----------------------------------------------------------------------------------
- // HTTPCONTACTINFOLIST
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPCONTACTINFOLIST
- {
- ULONG cContactInfo;
- LPHTTPCONTACTINFO prgContactInfo;
- } HTTPCONTACTINFOLIST, *LPHTTPCONTACTINFOLIST;
- // -----------------------------------------------------------------------------------
- // HTTPMAILRESPONSE
- // -----------------------------------------------------------------------------------
- typedef struct tagHTTPMAILRESPONSE
- {
- HTTPMAILCOMMAND command; // Command for which the response was generated
- DWORD dwContext; // Client context
- BOOL fDone; // Is this the last response for the command
- IXPRESULT rIxpResult; // Result information
- IHTTPMailTransport *pTransport; // Pointer to the HTTPMail transport that generated the response
- // This is a union of response information based on the command
- [switch_type(HTTPMAILCOMMAND), switch_is((HTTPMAILCOMMAND)command)]
- union
- {
- [case(HTTPMAIL_GETPROP)] HTTPMAILGETPROP rGetPropInfo;
- [case(HTTPMAIL_GET)] HTTPMAILGET rGetInfo;
- [case(HTTPMAIL_PUT)] HTTPMAILPOST rPutInfo;
- [case(HTTPMAIL_POST)] HTTPMAILPOST rPostInfo;
- [case(HTTPMAIL_PROPFIND)] HTTPMAILPROPFIND rPropFindInfo;
- [case(HTTPMAIL_MKCOL)]HTTPMAILLOCATION rMkColInfo;
- [case(HTTPMAIL_COPY)]HTTPMAILLOCATION rCopyMoveInfo;
- [case(HTTPMAIL_BCOPY)]HTTPMAILBCOPYMOVELIST rBCopyMoveList;
- [case(HTTPMAIL_MEMBERINFO)] HTTPMEMBERINFOLIST rMemberInfoList; // response for MemberInfo, FindFolders
- [case(HTTPMAIL_MARKREAD)] HTTPMEMBERERRORLIST rMemberErrorList; // response for MarkRead, BDELETE
- [case(HTTPMAIL_SENDMESSAGE)] HTTPMAILPOST rSendMessageInfo;
- [case(HTTPMAIL_LISTCONTACTS)] HTTPCONTACTIDLIST rContactIdList;
- [case(HTTPMAIL_CONTACTINFO)] HTTPCONTACTINFOLIST rContactInfoList;
- [case(HTTPMAIL_POSTCONTACT)] HTTPCONTACTID rPostContactInfo;
- [case(HTTPMAIL_PATCHCONTACT)] HTTPCONTACTID rPatchContactInfo;
- [default];
- };
- } HTTPMAILRESPONSE, *LPHTTPMAILRESPONSE;
- // -----------------------------------------------------------------------------------
- // OnResponse
- //
- // Description
- // Called by IHTTPMailTransport when a command response is received from the HTTP server
- //
- // Paramters
- // pResponse Response information
- //
- // Return values:
- // S_OK The client should always return S_OK
- //
- // -----------------------------------------------------------------------------------
- HRESULT OnResponse(
- [in]
- LPHTTPMAILRESPONSE pResponse);
- HRESULT GetParentWindow(
- [out]
- HWND *phwndParent);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IHTTPMailTransport
- // ---------------------------------------------------------------------------------------
- [
- uuid(B8BDE03C-E548-11d1-A86E-0000F8084F96),
- helpstring("HTTPMail Internet Transport Interface"),
- local,
- ]
- interface IHTTPMailTransport : IInternetTransport
- {
- typedef struct tagHTTPTARGETLIST
- {
- ULONG cTarget;
- LPCSTR *prgTarget;
- } HTTPTARGETLIST, *LPHTTPTARGETLIST;
-
-
- // -----------------------------------------------------------------------------------
- // InitNew
- //
- // Description:
- // This method Initializes the internet transport. This method be called before
- // the transport can doing anything.
- //
- // Parameters:
- // pszUserAgent User agent string sent in http queries
- //
- // pszLogFilePath Full file path in which to log the protocol commands.
- // NULL is a valid value (no logging)
- // pCallback(required) Specifies the Transport callback interface.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT InitNew(
- [in]
- LPCSTR pszUserAgent,
- [in]
- LPCSTR pszLogFilePath,
- [in]
- IHTTPMailCallback *pCallback);
-
- // -----------------------------------------------------------------------------------
- // CommandGET
- // rgszAcceptTypes is a null terminated list of accept types.
- // -----------------------------------------------------------------------------------
- HRESULT CommandGET(
- [in]
- LPCSTR pszPath,
- [in]
- LPCSTR *rgszAcceptTypes,
- [in]
- BOOL fTranslate,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandPUT
- // -----------------------------------------------------------------------------------
- HRESULT CommandPUT(
- [in]
- LPCSTR pszPath,
- [in]
- LPVOID lpvData,
- [in]
- ULONG cbSize,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandPOST
- // -----------------------------------------------------------------------------------
- HRESULT CommandPOST(
- [in]
- LPCSTR pszPath,
- [in]
- IStream *pStream,
- [in]
- LPCSTR pszContentType,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandDELETE
- // -----------------------------------------------------------------------------------
- HRESULT CommandDELETE(
- [in]
- LPCSTR pszPath,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandBDELETE
- // -----------------------------------------------------------------------------------
- HRESULT CommandBDELETE(
- [in]
- LPCSTR pszSourceCollection,
- [in]
- LPHTTPTARGETLIST pTargets,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandPROPFIND
- // -----------------------------------------------------------------------------------
- HRESULT CommandPROPFIND(
- [in]
- LPCSTR pszPath,
- [in]
- IPropFindRequest *pRequest,
- [in]
- DWORD dwDepth,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandPROPPATCH
- // -----------------------------------------------------------------------------------
- HRESULT CommandPROPPATCH(
- [in]
- LPCSTR pszPath,
- [in]
- IPropPatchRequest *pRequest,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandMKCOL
- // -----------------------------------------------------------------------------------
- HRESULT CommandMKCOL(
- [in]
- LPCSTR pszPath,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandCOPY
- // -----------------------------------------------------------------------------------
- HRESULT CommandCOPY(
- [in]
- LPCSTR pszPath,
- [in]
- LPCSTR pszDestination,
- [in]
- BOOL fAllowRename,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandBCOPY
- // -----------------------------------------------------------------------------------
- HRESULT CommandBCOPY(
- [in]
- LPCSTR pszSourceCollection,
- [in]
- LPHTTPTARGETLIST pTargets,
- [in]
- LPCSTR pszDestCollection,
- [in]
- LPHTTPTARGETLIST pDestinations,
- [in]
- BOOL fAllowRename,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandMOVE
- // -----------------------------------------------------------------------------------
- HRESULT CommandMOVE(
- [in]
- LPCSTR pszPath,
- [in]
- LPCSTR pszDestination,
- [in]
- BOOL fAllowRename,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // CommandBMOVE
- // -----------------------------------------------------------------------------------
- HRESULT CommandBMOVE(
- [in]
- LPCSTR pszSourceCollection,
- [in]
- LPHTTPTARGETLIST pTargets,
- [in]
- LPCSTR pszDestCollection,
- [in]
- LPHTTPTARGETLIST pDestinations,
- [in]
- BOOL fAllowRename,
- [in]
- DWORD dwContext);
-
- // -----------------------------------------------------------------------------------
- // GetProperty
- // Retrieves the requested account property synchronously or asynchronously.
- // If the property is immediately available, it is returned synchronously,
- // and the result of the function is S_OK. In the sync case, it is the caller's
- // responsibility to free the property string by calling CoTaskMemFree.
- // If the property is not available immediately, the function result is
- // E_PENDING, and the result is returned via a call to the callback's
- // OnResponse method.
- //
- // The caller can force the call to return async by passing a null ppszProp.
- // The call CANNOT force the call to return sync.
- //
- // Returns: if requesting the root props succeeded, and the server returned
- // xml that did not contain the specific root property requested by the client,
- // the return value will be IXP_E_HTTP_ROOT_PROP_NOT_FOUND.
- // -----------------------------------------------------------------------------------
- HRESULT GetProperty(
- [in]
- HTTPMAILPROPTYPE proptype,
- [out]
- LPSTR *ppszProp);
-
- // -----------------------------------------------------------------------------------
- // MemberInfo
- //
- // Description:
- // This method is called to discover folders, messages, and specific properties
- // of folders and messages.
- //
- // Parameters:
- //
- // pszPath null terminated string that is the complete path
- // to the resource (or collection)
- // examples:
- // a message: "http://www.hotmail.com/inbox/msg12345
- // a folder: "http://www.hotmail.com/inbox/"
- // MEMBERINFOFLAGS flags that define which properties should be requested
- // dwDepth maps to the DAV depth header. Can be an integer or the
- // constant DEPTH_INFINITY. A depth of 0 means request
- // properties on the resource at pszPath. A depth of
- // 1 means request properties on the resource at pszPath
- // and at all of its first-level children, etc.
- // fIncludeRoot boolean indicating whether or not to include the item
- // at pszPath in the response. Maps to the "noroot" token
- // optionally included in the DAV depth header. To request
- // properties on all of the first-level members of a
- // resource, and omit the resource itself from the response,
- // set dwDepth = 1 and fIncludeRoot = FALSE.
- // -----------------------------------------------------------------------------------
- HRESULT MemberInfo(
- [in]
- LPCSTR pszPath,
- [in]
- MEMBERINFOFLAGS flags,
- [in]
- DWORD dwDepth,
- [in]
- BOOL fIncludeRoot,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // FindFolders
- //
- // Description:
- // This method is called to discover the collection hierarchy that exists underneath
- // the pszPath URL. The response is identical to the MemberInfo response. This method
- // causes a non-DAV 1.0 verb (SEARCH) to be sent to the server. Callers should be
- // prepared to fallback to other forms of folder discovery if this method fails.
- //
- // Parameters:
- //
- // pszPath null terminated string that is the complete path
- // to the root of the folder hiearchy. The collection at
- // pszPath will not be included in the response.
- //
- // dwContext context provided by caller.
- // -----------------------------------------------------------------------------------
- HRESULT FindFolders(
- [in]
- LPCSTR pszPath,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // MarkRead
- // -----------------------------------------------------------------------------------
- HRESULT MarkRead(
- [in]
- LPCSTR pszPath,
- [in]
- LPHTTPTARGETLIST pTargets,
- [in]
- BOOL fMarkRead,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // SendMessage:
- // Send a message using an http server that supports the http-based RFC821
- // send protocol.
- //
- // Parameters:
- //
- // pszPath "sendmsg" url. server url that can receive
- // "POST" commands with request bodies that
- // conform to the http mail spec.
- // pszFrom The "from" address associated with the outbound
- // mail. This address must be of the form:
- // foo@bar.com
- // pTargets List of e-mail address that will receive
- // copies of the message. This list should include
- // all direct recipients as well as "cc" and "bcc"
- // recipients. Addresses must be of the form:
- // foo@bar.com
- // fSaveInSent Indicates whether or not the server should save
- // a copy of the outbound message in the users
- // "Sent Items" folder. It is up to the server
- // to determine the specific behavior associated
- // with saving an outboundmessage.
- // pMessageStream A stream that contains an rfc822 compliant
- // message. The contents of this stream are not
- // validated by this API. It is the responsibility
- // of the caller to insure that the message is
- // rfc822 compliant.
- // dwContext A dword which indentifies the specific request.
- // This dword will be included in all async responses,
- // and enables the caller to uniquely identify the request.
- // -----------------------------------------------------------------------------------
- HRESULT SendMessage(
- [in]
- LPCSTR pszPath,
- [in]
- LPCSTR pszFrom,
- [in]
- LPHTTPTARGETLIST pTargets,
- [in]
- BOOL fSaveInSent,
- [in]
- IStream *pMessageStream,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // ListContacts
- // -----------------------------------------------------------------------------------
- HRESULT ListContacts(
- [in]
- LPCSTR pszPath,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // ListContactInfos : temporary method. pszPath is assumed to be a collection.
- // returns all contacts in the specified collection. this method will go away
- // when the hotmail server supports bpropfind. response is contained in the
- // rContactInfoList and the command is the same as ContactInfo.
- // -----------------------------------------------------------------------------------
- HRESULT ListContactInfos(
- [in]
- LPCSTR pszCollectionPath,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // ContactInfo
- // -----------------------------------------------------------------------------------
- HRESULT ContactInfo(
- [in]
- LPCSTR pszPath,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // PostContact
- // -----------------------------------------------------------------------------------
- HRESULT PostContact(
- [in]
- LPCSTR pszPath,
- [in]
- LPHTTPCONTACTINFO pciInfo,
- [in]
- DWORD dwContext);
- // -----------------------------------------------------------------------------------
- // PatchContact
- // -----------------------------------------------------------------------------------
- HRESULT PatchContact(
- [in]
- LPCSTR pszPath,
- [in]
- LPHTTPCONTACTINFO pciInfo,
- [in]
- DWORD dwContext);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IPOP3Callback
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7E3-3435-11d0-81D0-00C04FD85AB4),
- helpstring("POP3 Callback Interface"),
- local,
- ]
- interface IPOP3Callback : ITransportCallback
- {
- // -----------------------------------------------------------------------------------
- // POP3COMMAND
- // -----------------------------------------------------------------------------------
- typedef enum tagPOP3COMMAND {
- POP3_NONE,
- POP3_BANNER,
- POP3_CONNECTED,
- POP3_USER,
- POP3_PASS,
- POP3_AUTH,
- POP3_UIDL,
- POP3_STAT,
- POP3_LIST,
- POP3_DELE,
- POP3_RETR,
- POP3_TOP,
- POP3_NOOP,
- POP3_QUIT,
- POP3_RSET,
- POP3_CUSTOM
- } POP3COMMAND;
- // -----------------------------------------------------------------------------------
- // POP3RETR
- // -----------------------------------------------------------------------------------
- typedef struct tagPOP3RETR {
- BOOL fHeader; // The full rfc/mime header has been downloaded.
- BOOL fBody; // The body has been downloaded.
- DWORD dwPopId; // POP session message id
- DWORD cbSoFar; // Number of bytes downloaded since start of download
- LPSTR pszLines; // Lines of the message (do not free this).
- ULONG cbLines; // Number of bytes in pszLines
- } POP3RETR, *LPPOP3RETR;
- // -----------------------------------------------------------------------------------
- // POP3TOP
- // -----------------------------------------------------------------------------------
- typedef struct tagPOP3TOP {
- BOOL fHeader; // The header has been downloaded.
- BOOL fBody; // The body has been downloaded.
- DWORD dwPopId; // POP session message id
- DWORD cPreviewLines; // Number of lines being previewed
- DWORD cbSoFar; // Number of bytes downloaded since start of download
- LPSTR pszLines; // Header lines
- ULONG cbLines; // Number of bytes in pszLines
- } POP3TOP, *LPPOP3TOP;
- // -----------------------------------------------------------------------------------
- // POP3LIST
- // -----------------------------------------------------------------------------------
- typedef struct tagPOP3LIST {
- DWORD dwPopId; // POP session message id
- DWORD cbSize; // Message Size
- } POP3LIST, *LPPOP3LIST;
- // -----------------------------------------------------------------------------------
- // POP3UIDL
- // -----------------------------------------------------------------------------------
- typedef struct tagPOP3UIDL {
- DWORD dwPopId; // POP session message id
- LPSTR pszUidl; // POP UIDL
- } POP3UIDL, *LPPOP3UIDL;
- // -----------------------------------------------------------------------------------
- // POP3STAT
- // -----------------------------------------------------------------------------------
- typedef struct tagPOP3STAT {
- DWORD cMessages; // Number of messages on the server
- DWORD cbMessages; // Number of bytes of messages on the server
- } POP3STAT, *LPPOP3STAT;
- // -----------------------------------------------------------------------------------
- // POP3RESPONSE
- // -----------------------------------------------------------------------------------
- typedef struct tagPOP3RESPONSE {
- POP3COMMAND command; // Command in which the response was generated for
- BOOL fDone; // Was this the last response for this command
- IXPRESULT rIxpResult; // Result Information
- IPOP3Transport *pTransport; // Pointer to the POP3 transport that generated the response
- BOOL fValidInfo; // The data in the union below is valid. This can be FALSE due to the
- // fact that the fDone == TRUE response can be received with
- // no data.
- // This is a union of response information based on the command
- [switch_type(POP3COMMAND), switch_is((POP3COMMAND)command)]
- union {
- [case(POP3_UIDL)] POP3UIDL rUidlInfo;
- [case(POP3_STAT)] POP3STAT rStatInfo;
- [case(POP3_LIST)] POP3LIST rListInfo;
- [case(POP3_DELE)] DWORD dwPopId;
- [case(POP3_RETR)] POP3RETR rRetrInfo;
- [case(POP3_TOP)] POP3TOP rTopInfo;
- [default];
- };
- } POP3RESPONSE, *LPPOP3RESPONSE;
- // -----------------------------------------------------------------------------------
- // OnResponse
- // -----------------------------------------------------------------------------------
- HRESULT OnResponse(
- [in]
- LPPOP3RESPONSE pResponse);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IPOP3Transport
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7E4-3435-11d0-81D0-00C04FD85AB4),
- helpstring("POP3 Internet Transport Interface"),
- local,
- ]
- interface IPOP3Transport : IInternetTransport
- {
- // -----------------------------------------------------------------------------------
- // POP3 Group/List/Single Item commands
- // -----------------------------------------------------------------------------------
- typedef enum tagPOP3CMDTYPE {
- POP3CMD_GET_POPID,
- POP3CMD_GET_MARKED,
- POP3CMD_GET_ALL
- } POP3CMDTYPE;
- // -----------------------------------------------------------------------------------
- // InitNew
- //
- // Description:
- // This method Initializes the internet transport. This method be called before
- // the transport can doing anything.
- //
- // Parameters:
- // pszLogFilePath Full file path in which to log the protocol commands.
- // NULL is a valid value (no logging)
- // pCallback(required) Specifies the Transport callback interface.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT InitNew(
- [in]
- LPSTR pszLogFilePath,
- [in]
- IPOP3Callback *pCallback);
- // -----------------------------------------------------------------------------------
- // MarkItem
- // -----------------------------------------------------------------------------------
- typedef enum tagPOP3MARKTYPE {
- POP3_MARK_FOR_TOP = 0x00000001,
- POP3_MARK_FOR_RETR = 0x00000002,
- POP3_MARK_FOR_DELE = 0x00000004,
- POP3_MARK_FOR_UIDL = 0x00000008,
- POP3_MARK_FOR_LIST = 0x00000010
- } POP3MARKTYPE;
- HRESULT MarkItem(
- [in]
- POP3MARKTYPE marktype,
- [in]
- DWORD dwPopId,
- [in]
- boolean fMarked);
- // -----------------------------------------------------------------------------------
- // CommandAUTH
- // -----------------------------------------------------------------------------------
- HRESULT CommandAUTH(
- [in]
- LPSTR pszAuthType);
- // -----------------------------------------------------------------------------------
- // CommandUSER
- // -----------------------------------------------------------------------------------
- HRESULT CommandUSER(
- [in]
- LPSTR pszUserName);
- // -----------------------------------------------------------------------------------
- // CommandPass
- // -----------------------------------------------------------------------------------
- HRESULT CommandPASS(
- [in]
- LPSTR pszPassword);
- // -----------------------------------------------------------------------------------
- // CommandLIST
- // -----------------------------------------------------------------------------------
- HRESULT CommandLIST(
- [in]
- POP3CMDTYPE cmdtype,
- [in]
- DWORD dwPopId);
- // -----------------------------------------------------------------------------------
- // CommandTOP
- // -----------------------------------------------------------------------------------
- HRESULT CommandTOP(
- [in]
- POP3CMDTYPE cmdtype,
- [in]
- DWORD dwPopId,
- [in]
- DWORD cPreviewLines);
- // -----------------------------------------------------------------------------------
- // CommandQUIT
- // -----------------------------------------------------------------------------------
- HRESULT CommandQUIT(void);
- // -----------------------------------------------------------------------------------
- // CommandSTAT
- // -----------------------------------------------------------------------------------
- HRESULT CommandSTAT(void);
- // -----------------------------------------------------------------------------------
- // CommandNOOP
- // -----------------------------------------------------------------------------------
- HRESULT CommandNOOP(void);
- // -----------------------------------------------------------------------------------
- // CommandRSET
- // -----------------------------------------------------------------------------------
- HRESULT CommandRSET(void);
- // -----------------------------------------------------------------------------------
- // CommandUIDL
- // -----------------------------------------------------------------------------------
- HRESULT CommandUIDL(
- [in]
- POP3CMDTYPE cmdtype,
- [in]
- DWORD dwPopId);
- // -----------------------------------------------------------------------------------
- // CommandDELE
- // -----------------------------------------------------------------------------------
- HRESULT CommandDELE(
- [in]
- POP3CMDTYPE cmdtype,
- [in]
- DWORD dwPopId);
- // -----------------------------------------------------------------------------------
- // CommandRETR
- // -----------------------------------------------------------------------------------
- HRESULT CommandRETR(
- [in]
- POP3CMDTYPE cmdtype,
- [in]
- DWORD dwPopId);
- }
- // ---------------------------------------------------------------------------------------
- // IID_INNTPCallback
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7E6-3435-11d0-81D0-00C04FD85AB4),
- helpstring("NNTP Callback Interface"),
- local,
- ]
- interface INNTPCallback : ITransportCallback
- {
- // -----------------------------------------------------------------------------------
- // NNTPSTATE - These are the various states the NNTP Transport can be in. These
- // states are also used to determine which type of data is being returned
- // in the client's OnResponse() callback.
- // -----------------------------------------------------------------------------------
- typedef enum tagNNTPSTATE {
- NS_DISCONNECTED, // not connected
- NS_CONNECT, // awaiting connect response
- NS_AUTHINFO, // awaiting authorization
- NS_POST, // awaiting CommandPOST() to complete
- NS_IDLE, // connected (& authorized if necessary)
- NS_LIST, // awaiting LIST data
- NS_LISTGROUP, // awaiting LISTGROUP data
- NS_NEWGROUPS, // awaiting NEWGROUPS data
- NS_GROUP, // awaiting GROUP response
- NS_LAST, // awaiting LAST response
- NS_NEXT, // awaiting NEXT response
- NS_STAT, // awaiting STAT response
- NS_ARTICLE, // awaiting ARTICLE data
- NS_HEAD, // awaiting HEAD data
- NS_BODY, // awaiting BODY data
- NS_DATE, // awaiting DATE response
- NS_MODE, // awaiting MODE response
- NS_QUIT, // awaiting QUIT response
- NS_HEADERS, // awaiting XOVER or XHDR data from GetHeaders()
- NS_XHDR // awaiting XHDR data
- } NNTPSTATE;
- // -----------------------------------------------------------------------------------
- // NNTPGROUP - This is the response from the CommandGROUP() function. The data is
- // the current status of the group that was switched to.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPGROUP {
- DWORD dwCount; // Estimated number of articles in the group
- DWORD dwFirst; // First article number in the group
- DWORD dwLast; // Last article number in the group
- LPSTR pszGroup; // Name of the group
- } NNTPGROUP, *LPNNTPGROUP;
- // -----------------------------------------------------------------------------------
- // NNTPNEXT - This structure will be used for the response from CommandNEXT(),
- // CommandLAST(), and CommandSTAT(). The data returned is the article
- // number and message id for the article that is selected by the command
- // that was issued.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPNEXT {
- DWORD dwArticleNum; // Article number
- LPSTR pszMessageId; // Message ID
- } NNTPNEXT, *LPNNTPNEXT;
- // -----------------------------------------------------------------------------------
- // NNTPARTICLE - This structure returns the data from a CommandARTICLE() function.
- // Depending on the size of the article being retrieved, the callback
- // may recieve multiple calls for a single article. When fDone is TRUE
- // then all of the article data has been retrieved. pszLines is not
- // accumulated over all of the callbacks, it is the client's
- // responsibility to assemble all of the pszLines that are returned to
- // build the message.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPARTICLE {
- DWORD dwArticleNum; // Article number
- LPSTR pszMessageId; // Message ID
- LPSTR pszLines; // Lines of the message
- ULONG cbLines; // Number of bytes in pszLines
- ULONG cLines; // Number of lines in pszLines
- DWORD dwReserved; // Reserved for system use
- } NNTPARTICLE, *LPNNTPARTICLE;
- // -----------------------------------------------------------------------------------
- // NNTPLIST - This structure is the data returned from the CommandLIST() function.
- // Since the NNTP LIST command can have multiple extensions, the data
- // returned is relatively unparsed to provide greater flexibility to the
- // client. The data is returned in array of NULL terminated strings that
- // contain the lines returned from the server. When fDone is TRUE, then
- // all of the data has been retrieved. rgszLines is not accumulated by
- // the transport between calls to OnResponse(). It is the client's
- // responsibility to store this information as it comes in.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPLIST {
- DWORD cLines; // Number of lines returned
- LPSTR *rgszLines; // Array of lines returned by the LIST command. The
- // number of lines in rgszLines is cLines. The recipient
- // must call INNTPCallback::FreeListResponse() to free
- // this structure.
- } NNTPLIST, *LPNNTPLIST;
- // -----------------------------------------------------------------------------------
- // NNTPLISTGROUP - This structure is sent in response to a CommandLISTGROUP() call.
- // rgArticles is an array of article numbers that are contained in
- // the newsgroup. Since there can be quite a few articles,
- // OnResponse() may be called multiple times with the data as it
- // arrives. rgArticles is not accumulated between calls to
- // OnResponse() so it is up to the client to store this information
- // as it arrives. fDone will be TRUE when all the information has
- // been returned.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPLISTGROUP {
- DWORD cArticles; // Number of article numbers in rgArticles
- DWORD *rgArticles; // Array of article numbers available in the group
- } NNTPLISTGROUP, *LPNNTPLISTGROUP;
- // -----------------------------------------------------------------------------------
- // NNTPHEADER - This structure contains the parsed information for a single header
- // returned from the GetHeaders() command. An array of these headers
- // is contained in the NNTPHEADERRESP struct.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPHEADER {
- DWORD dwArticleNum; // Article number
- LPSTR pszSubject; // Article subject
- LPSTR pszFrom; // Who the article is from
- LPSTR pszDate; // Date the article was posted
- LPSTR pszMessageId; // Message id
- LPSTR pszReferences; // References
- DWORD dwBytes; // Size of the message in bytes (might not be filled in)
- DWORD dwLines; // Size of the message in lines
- LPSTR pszXref; // XREF: header for cross post managment
- } NNTPHEADER, *LPNNTPHEADER;
- // -----------------------------------------------------------------------------------
- // NNTPHEADERRESP - This structure will be returned in response to the GetHeaders()
- // command. Since the number of headers requested may be large,
- // OnResponse() may be called multiple times in response to this
- // command. rgHeaders is not accumulated by the transport between
- // calls to OnResponse() therefore it is the responsibility of the
- // caller to store this information as it is retrieved. When all
- // the data is retrieved, then fDone will be set to TRUE. Since
- // not all servers provide the XREF: header in their XOVER records,
- // fSupportsXRef will be set to TRUE if the pszXref field in
- // NNTPHEADER is valid. If this is FALSE, the client can retrieve
- // this header with a call to CommandXHDR().
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPHEADERRESP {
- DWORD cHeaders; // Number of headers in rgHeaders
- LPNNTPHEADER rgHeaders; // Array of header structures
- BOOL fSupportsXRef; // TRUE if the headers have a valid pszXref value.
- // Otherwise, the client needs to issue an XHdr to
- // retrieve that value if they're interested.
- DWORD dwReserved; // Reserved for system use
- } NNTPHEADERRESP, *LPNNTPHEADERRESP;
- // -----------------------------------------------------------------------------------
- // NNTPXHDR - An array of these structures will be returned in the NNTPXHDRRESP
- // structure.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPXHDR {
- DWORD dwArticleNum; // Article number this header is for
- LPSTR pszHeader; // Requested article header for this article
- } NNTPXHDR, *LPNNTPXHDR;
- // -----------------------------------------------------------------------------------
- // NNTPXHDRRESP - This will be returned in response to a CommandXHDR() call. Since
- // the number of headers returned is potentially large, OnResponse()
- // may be called multiple times in response to this command. rgHeaders
- // is not accumulated between calls to OnResponse(), therefore it is
- // up to the client to store this data as it arrives. fDone will be
- // set to TRUE when all of the headers have been returned.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPXHDRRESP {
- DWORD cHeaders; // Number of header values in rgHeaders
- LPNNTPXHDR rgHeaders; // Array of NNTPXHDR structs containing the requested headers
- DWORD dwReserved; // Reserved for system use
- } NNTPXHDRRESP, *LPNNTPXHDRRESP;
- // -----------------------------------------------------------------------------------
- // NNTPRESPONSE - This structure is the general holder for all of the data returned
- // from the INNTPTransport commands. The state member tells the
- // receiver which command this data is in response to. If fMustRelease
- // is TRUE, then when the client is done with this data, it should
- // call INNTPTransport::ReleaseResponse() to free that memory. See
- // the explanation of the various structures to see the details on
- // each type of response.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPRESPONSE {
- NNTPSTATE state; // Command in which the response was generated for
- BOOL fMustRelease; // TRUE if the data contained within this struct must be
- // freed with a call to INNTPTransport::ReleaseResponse()
- BOOL fDone; // TRUE when there is no more data that will arrive for this
- // command
- IXPRESULT rIxpResult; // Result Information
- INNTPTransport *pTransport; // Pointer to the NNTP transport that generated the response
- // This is a union of response information based on the command
- [switch_type(NNTPSTATE), switch_is((NNTPSTATE) state)]
- union {
- [case(NS_GROUP)] NNTPGROUP rGroup;
- [case(NS_LAST)] NNTPNEXT rLast;
- [case(NS_NEXT)] NNTPNEXT rNext;
- [case(NS_STAT)] NNTPNEXT rStat;
- [case(NS_ARTICLE)] NNTPARTICLE rArticle;
- [case(NS_HEAD)] NNTPARTICLE rHead;
- [case(NS_BODY)] NNTPARTICLE rBody;
- [case(NS_LIST)] NNTPLIST rList;
- [case(NS_LISTGROUP)] NNTPLISTGROUP rListGroup;
- [case(NS_NEWGROUPS)] NNTPLIST rNewgroups;
- [case(NS_DATE)] SYSTEMTIME rDate;
- [case(NS_HEADERS)] NNTPHEADERRESP rHeaders;
- [case(NS_XHDR)] NNTPXHDRRESP rXhdr;
- [default];
- };
- } NNTPRESPONSE, *LPNNTPRESPONSE;
- // -----------------------------------------------------------------------------------
- // OnResponse
- // -----------------------------------------------------------------------------------
- HRESULT OnResponse(
- [in]
- LPNNTPRESPONSE pResponse);
- }
- // ---------------------------------------------------------------------------------------
- // IID_INNTPTransport
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7E5-3435-11d0-81D0-00C04FD85AB4),
- helpstring("NNTP Internet Transport Interface"),
- local,
- ]
- interface INNTPTransport : IInternetTransport
- {
- // -----------------------------------------------------------------------------------
- // AUTHTYPE
- // -----------------------------------------------------------------------------------
- typedef enum tagAUTHTYPE {
- AUTHTYPE_USERPASS,
- AUTHTYPE_SIMPLE,
- AUTHTYPE_SASL
- } AUTHTYPE;
- // -----------------------------------------------------------------------------------
- // AUTHINFO - This structure is used to specify the type of authentication to use
- // in the CommandAUTHINFO() command. For AUTHTYPE_USERPASS and
- // AUTHTYPE_SIMPLE, pszUser and pszPass are the user name and password
- // to send with the command.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPAUTHINFO {
- AUTHTYPE authtype;
- LPSTR pszUser;
- LPSTR pszPass;
- } NNTPAUTHINFO, *LPNNTPAUTHINFO;
- // -----------------------------------------------------------------------------------
- // ARTICLEIDTYPE
- // -----------------------------------------------------------------------------------
- typedef enum tagARTICLEIDTYPE {
- AID_MSGID,
- AID_ARTICLENUM
- } ARTICLEIDTYPE;
- // -----------------------------------------------------------------------------------
- // ARTICLEID
- //
- // This structure is used to specify an article id to the various NNTP commands that
- // require one (i.e. ARTICLE, BODY, STAT). These commands accept either a message-id
- // or if the user is current in a the context of a newsgroup the article number within
- // that group. When filling in this structure the user should set idType to either
- // AID_MSGID of pszMessageId is valid, or AID_ARTICLENUM if dwArticleNum.
- // -----------------------------------------------------------------------------------
- typedef struct ARTICLEID {
- ARTICLEIDTYPE idType;
- [switch_type(ARTICLEIDTYPE), switch_is((ARTICLEIDTYPE)idType)]
- union {
- [case(AID_MSGID)]
- LPSTR pszMessageId;
- [case(AID_ARTICLENUM)]
- DWORD dwArticleNum;
- [default];
- };
- } ARTICLEID, *LPARTICLEID;
- // -----------------------------------------------------------------------------------
- // NNTPMESSAGE
- //
- // This structure provides the information needed to post a message to the news server
- // using the POST command.
- // -----------------------------------------------------------------------------------
- typedef struct tagNNTPMESSAGE {
- ULONG cbSize; // Size of the message in bytes
- LPSTREAM pstmMsg; // Stream containing a ANSI MIME/rfc822/rfc1036 message stream
- } NNTPMESSAGE, *LPNNTPMESSAGE;
- // -----------------------------------------------------------------------------------
- // RANGE
- //
- // The range structure allows the caller to provide arguments for commands that allow
- // a range of headers to be retrieved. The range structure can be used to specify a
- // single number (ie XOVER 2010), or bounded range (ie XOVER 2000-2010) to request all
- // of the headers within that range [inclusive]. Use the idType field to specify
- // which range you are requesting.
- // -----------------------------------------------------------------------------------
- typedef enum tagRANGETYPE {
- RT_SINGLE, // num
- RT_RANGE, // num-num
- } RANGETYPE;
- typedef struct tagRANGE {
- RANGETYPE idType;
- DWORD dwFirst;
- DWORD dwLast;
- } RANGE, *LPRANGE;
- // -----------------------------------------------------------------------------------
- // InitNew
- //
- // Description:
- // This method Initializes the internet transport. This method be called before
- // the transport can doing anything.
- //
- // Parameters:
- // pszLogFilePath Full file path in which to log the protocol commands.
- // NULL is a valid value (no logging)
- // pCallback(required) Specifies the Transport callback interface.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT InitNew(
- [in]
- LPSTR pszLogFilePath,
- [in]
- INNTPCallback *pCallback);
- // -----------------------------------------------------------------------------------
- // CommandAUTHINFO
- //
- // Description:
- // The function issues an NNTPAUTHINFO command to the server along with the information
- // provided in the pszAuth parameter. RFC 977 provides the following formats as
- // valid AUTHINFO commands:
- //
- // AUTHINFO USER name|PASS password
- // AUTHINFO SIMPLE
- // user password
- //
- //
- // Parameters:
- // pAuthInfo
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandAUTHINFO(
- [in]
- LPNNTPAUTHINFO pAuthInfo);
- // -----------------------------------------------------------------------------------
- // CommandGROUP
- //
- // Description:
- // The function issues an GROUP command to the server. The server's response string
- // will be returned to the INNTPCallback::OnResponse().
- //
- // Parameters:
- // pszGroup Name of the newsgroup to enter.
- //
- // Returns:
- // E_INVALIDARG pszGroup is not a valid string pointer
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandGROUP(
- [in]
- LPSTR pszGroup);
- // -----------------------------------------------------------------------------------
- // CommandLAST
- //
- // Description:
- // This function issues the LAST command to the server. This has the effect of
- // moving the current article pointer to the article immediately preceeding the
- // current article pointer in the newsgroup. This command is only valid if a GROUP
- // command has been issued previously. The article number and message-id pointed to
- // by the new current article pointer are returned in INNTPCallback::OnResponse().
- //
- // Returns:
- // S_OK
- // E_OUTOFMEMORY
- // IXP_E_NOT_INIT
- // IXP_E_NOT_CONNECTED
- // IXP_E_BUSY
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandLAST(void);
- // -----------------------------------------------------------------------------------
- // CommandNEXT
- //
- // Description:
- // This function issues the NEXT command to the server. This has the effect of
- // moving the current article pointer to the article immediately after the current
- // article pointer in the newsgroup. This command is only valid if a GROUP command
- // has been issued previously. The article number and message-id pointed to by the
- // new current article pointer are returned in INNTPCallback::OnResponse().
- //
- // Returns:
- // S_OK
- // E_OUTOFMEMORY
- // IXP_E_NOT_INIT
- // IXP_E_NOT_CONNECTED
- // IXP_E_BUSY
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandNEXT(void);
- // -----------------------------------------------------------------------------------
- // CommandSTAT
- //
- // Description:
- // The function issues a STAT command to the server. If an article is specified
- // then this command has the effect of moving the current article pointer to the
- // specified message and returns the article number and message-id of the new current
- // article. Otherwise, the function will return the article number and message-id
- // of the current article.
- //
- // Parameters:
- // pArticleId (optional) Article number or message-id of the article to
- // retrieve status for. If a message-id is specified
- // the current article pointer will NOT be updated.
- //
- // Returns:
- // E_INVALIDARG pArticleId is not valid
- // E_OUTOFMEMORY An memory allocation failed
- // IXP_E_NOT_INIT
- // IXP_E_NOT_CONNECTED
- // IXP_E_BUSY
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandSTAT(
- [in]
- LPARTICLEID pArticleId);
- // -----------------------------------------------------------------------------------
- // CommandARTICLE
- //
- // Description:
- // This function is used to request an article from the server. If the caller has
- // previously issued a GROUP command then the article can be specified by either
- // article number or message-id. If the GROUP command has not been issued, then the
- // article can only be requested by message-id.
- //
- // Parameters:
- // pArticleId Either the article number or message-id of the article
- // to retrieve.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandARTICLE(
- [in]
- LPARTICLEID pArticleId);
- // -----------------------------------------------------------------------------------
- // CommandHEAD
- //
- // Description:
- // This function retrieves just the header for the requested article. If the caller
- // has previously issued a GROUP command, then the article can be specified by either
- // article number or message-id. Otherwise, the article must be requested by
- // message-id. The provided stream will be filled and returned to the caller in
- // INNTPCallback::OnResponse().
- //
- // Parameters:
- // pArticleId Structure specifying the article to retreive the
- // header for.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandHEAD(
- [in]
- LPARTICLEID pArticleId);
- // -----------------------------------------------------------------------------------
- // CommandBODY
- //
- // Description:
- // This function retrieves just the body for the requested article. If the caller
- // has previously issued a GROUP command, then the article can be specified by either
- // article number or message-id. Otherwise, the article must be requested by
- // message-id. The provided stream will be filled and returned to the caller in
- // INNTPCallback::OnResponse().
- //
- // Parameters:
- // pArticleId Structure specifying the article to retreive the
- // body for.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandBODY(
- [in]
- LPARTICLEID pArticleId);
- // -----------------------------------------------------------------------------------
- // CommandPOST
- //
- // Description:
- // Posts the specified message to the server.
- //
- // Parameters:
- // pMessage Specifies a stream that contains a valid RFC1036
- // message.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandPOST(
- [in]
- LPNNTPMESSAGE pMessage);
- // -----------------------------------------------------------------------------------
- // CommandLIST
- //
- // Description:
- // Sends a LIST command to the news server. If pszArgs is NULL, then the command will
- // retrieve a list of newsgroups available on the news server. The pszArgs parameter
- // can be used to issue one of the various extensions to the LIST command, ie.
- // LIST NEWSGROUPS, LIST ACTIVE, LIST OVERVIEW.FMT, or LIST SUBSCRIPTIONS. See
- // RFC 977 at http://ds.internic.net/rfc/rfc977.txt for a full list of extensions.
- //
- // Parameters:
- // pszArgs Any optional parameters that the user wants to
- // send with the LIST command. See the "Description"
- // above for more details.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandLIST(
- [in]
- LPSTR pszArgs);
- // -----------------------------------------------------------------------------------
- // CommandLISTGROUP
- //
- // Description:
- // Retrieves a list of all the article numbers in a particular news group. If the
- // caller specifies a newsgroup name, then the articles are listed for the specified
- // newsgroup. Otherwise, the currently selected newsgroup is listed. NOTE - this
- // command will reset the current article pointer is reset to the first article in
- // the newsgroup that was specified.
- //
- // Parameters:
- // pszGroup Optional newsgroup name to list articles for.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandLISTGROUP(
- [in]
- LPSTR pszGroup);
- // -----------------------------------------------------------------------------------
- // CommandNEWGROUPS
- //
- // Description:
- // Retrieves the list of newsgroups which have been added to the server since the
- // date specified in stLast. The caller can restrict the list by specifying a list
- // of distributions in pszDist. For example:
- //
- // CommandNEWGROUPS(&stLast, "alt.tv")
- //
- // will return the list of newsgroups that begin with "alt.tv" that have been added
- // to the server since the time in stLast.
- //
- // Parameters:
- // pstLast The time to specify as the last time groups were checked.
- // pszDist Distributions to check. This can be a single dist
- // such as "alt" or a list of dists such as "alt.tv,comp".
- // The list of distributions must be separated by commas.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandNEWGROUPS(
- [in]
- SYSTEMTIME *pstLast,
- [in]
- LPSTR pszDist);
- // -----------------------------------------------------------------------------------
- // CommandDATE
- //
- // Description:
- // Retrieves the date and time from the news server.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandDATE(void);
- // -----------------------------------------------------------------------------------
- // CommandMODE
- //
- // Description:
- // Issues a MODE command to the server. pszMode is a required argument, an example
- // of which are "MODE READER" to tell the server that the connection is for a user
- // instead of another server. Refer to RFC977 for more details.
- //
- // Parameters:
- // pszMode Required argument to the MODE command.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandMODE(
- [in]
- LPSTR pszMode);
- // -----------------------------------------------------------------------------------
- // CommandXHDR
- //
- // Description:
- // Issues an XHDR command to the server. This command can specify a range of
- // messages or a single message to retrieve the header from. If pRange is NULL and
- // pszMessageId is NULL the the header is retrieved from the message pointed to by
- // the server's current message pointer (see STAT, NEXT, LAST).
- //
- // Parameters:
- // pszHeader Which header to retrieve. IE "subject" or "xref"
- // pRange (optional) Range of messages to retrieve the header from
- // pszMessageId (optional) Message ID of the mesage to retrieve the header from
- //
- // Returns:
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandXHDR(
- [in]
- LPSTR pszHeader,
- [in]
- LPRANGE pRange,
- [in]
- LPSTR pszMessageId);
- // -----------------------------------------------------------------------------------
- // CommandQUIT()
- //
- // Description:
- // Issues a QUIT command to the server and terminates the connect.
- //
- // Returns:
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT CommandQUIT(void);
- // -----------------------------------------------------------------------------------
- // GetHeaders
- //
- // Description:
- // Retrieves an array of headers from the server. If a GROUP command has not been
- // previously sent this command is not valid.
- //
- // This function will first try to retrieve the specifed range of headers using
- // the XOVER command. If the server doesn't support XOVER, then the function will
- // try other methods such as a series of XHDR commands.
- //
- // Parameters:
- // pRange The range of headers to request. See the
- // documentation for the RANGE structure above to see
- // how to specify a range.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- // E_OUTOFMEMORY An memory allocation failed
- //
- // -----------------------------------------------------------------------------------
- HRESULT GetHeaders(
- [in]
- LPRANGE pRange);
- // -----------------------------------------------------------------------------------
- // ReleaseResponse()
- //
- // Description:
- // This function is used to free data returned to the client's OnResponse() callback.
- //
- // Parameters:
- // pResponse A pointer to the NNTPRESPONSE structure passed to the
- // OnResponse() callback.
- //
- // Returns:
- // E_INVALIDARG An invalid parameter was passed in
- //
- // -----------------------------------------------------------------------------------
- HRESULT ReleaseResponse(
- [in]
- LPNNTPRESPONSE pResponse);
- }
- // ---------------------------------------------------------------------------------------
- // IID_INNTPTransport2
- // ---------------------------------------------------------------------------------------
- [
- uuid(0DF2C7ED-3435-11d0-81D0-00C04FD85AB4),
- helpstring("NNTP Transport 2 Interface"),
- local,
- ]
- interface INNTPTransport2 : INNTPTransport
- {
- //***************************************************************************
- // Function: SetWindow
- //
- // Purpose:
- // This function creates a new window for async winsock processing
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT SetWindow(void);
- //***************************************************************************
- // Function: ResetWindow
- //
- // Purpose:
- // This function closes a window for async winsock processing
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT ResetWindow(void);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IRASCallback
- // ---------------------------------------------------------------------------------------
- [
- uuid(36D88911-3CD6-11d0-81DF-00C04FD85AB4),
- helpstring("RAS Callback Interface"),
- local,
- ]
- interface IRASCallback : IUnknown
- {
- // -----------------------------------------------------------------------------------
- // OnReconnect
- // -----------------------------------------------------------------------------------
- HRESULT OnReconnect(
- [in]
- LPSTR pszCurrentConnectoid,
- [in]
- LPSTR pszNewConnectoid,
- [in]
- IRASTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnLogonPrompt
- // -----------------------------------------------------------------------------------
- typedef struct tagIXPRASLOGON {
- CHAR szConnectoid[CCHMAX_CONNECTOID];
- CHAR szUserName[CCHMAX_USERNAME];
- CHAR szPassword[CCHMAX_PASSWORD];
- CHAR szDomain[CCHMAX_DOMAIN];
- CHAR szPhoneNumber[CCHMAX_PHONE_NUMBER];
- BOOL fSavePassword;
- } IXPRASLOGON, *LPIXPRASLOGON;
- HRESULT OnLogonPrompt(
- [in,out]
- LPIXPRASLOGON pRasLogon,
- [in]
- IRASTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnRasDialStatus
- // -----------------------------------------------------------------------------------
- cpp_quote("#ifndef RASCONNSTATE")
- typedef DWORD RASCONNSTATE;
- cpp_quote("#endif")
- HRESULT OnRasDialStatus(
- [in]
- RASCONNSTATE rasconnstate,
- [in]
- DWORD dwError,
- [in]
- IRASTransport *pTransport);
- // -----------------------------------------------------------------------------------
- // OnDisconnect
- //
- // Description:
- // This method allows the client to decide if the current RAS connection should
- // be hungup. This is useful, especially on application shutdown, in which case
- // the user may want to leave their RAS connection established even after the
- // application using the connection goes away. This client could show UI on this
- // callback to prompt the user.
- //
- // Parameters:
- // pTransport The RAS transport that generated the OnDisconnect call
- //
- // Returns:
- // S_OK The client can return S_OK to "hangup" the current
- // RAS connnection.
- // S_FALSE The client can return S_FALSE to leave the connection
- // established.
- // -----------------------------------------------------------------------------------
- HRESULT OnDisconnect(
- [in]
- LPSTR pszCurrentConnectoid,
- [in]
- boolean fConnectionOwner,
- [in]
- IRASTransport *pTransport);
- }
- // ---------------------------------------------------------------------------------------
- // IID_IRASTransport
- // ---------------------------------------------------------------------------------------
- [
- uuid(8A950001-3CCF-11d0-81DF-00C04FD85AB4),
- helpstring("RAS Transport Interface"),
- local,
- ]
- interface IRASTransport : IInternetTransport
- {
- // -----------------------------------------------------------------------------------
- // InitNew
- // -----------------------------------------------------------------------------------
- HRESULT InitNew(
- [in]
- IRASCallback *pCallback);
- // -----------------------------------------------------------------------------------
- // GetCurrentConnectoid - Returns Connectoid name of the current RAS Connection.
- // If not connected, IXP_E_NOT_CONNECTED is returned. cchMax must be greater than or
- // equal to CCHMAX_CONNECTOID, or E_INVALIDARG will be returned.
- // -----------------------------------------------------------------------------------
- HRESULT GetCurrentConnectoid(
- [in,ref]
- LPSTR pszConnectoid,
- [in]
- ULONG cchMax);
- // ----------------------------------------------------------
- // GetRasErrorString
- // ----------------------------------------------------------
- HRESULT GetRasErrorString (
- [in]
- UINT uRasErrorValue,
- [in,ref]
- LPSTR pszErrorString,
- [in]
- ULONG cchMax,
- [out]
- DWORD *pdwRASResult);
- // ----------------------------------------------------------
- // FillConnectoidCombo
- // ----------------------------------------------------------
- HRESULT FillConnectoidCombo(
- [in]
- HWND hwndComboBox,
- [in]
- boolean fUpdateOnly,
- [out]
- DWORD *pdwRASResult);
- // ----------------------------------------------------------
- // EditConnectoid
- // ----------------------------------------------------------
- HRESULT EditConnectoid(
- [in]
- HWND hwndParent,
- [in]
- LPSTR pszConnectoid,
- [out]
- DWORD *pdwRASResult);
- // ----------------------------------------------------------
- // CreateConnectoid
- // ----------------------------------------------------------
- HRESULT CreateConnectoid(
- [in]
- HWND hwndParent,
- [out]
- DWORD *pdwRASResult);
- }
- // ***************************************************************************************
- // ---------------------------------------------------------------------------------------
- // IID_IRangeList
- // ---------------------------------------------------------------------------------------
- [
- uuid(8C438160-4EF6-11d0-874F-00AA00530EE9),
- helpstring("Rangelist Interface: used to represent a range of messages."),
- local,
- ]
- interface IRangeList : IUnknown
- {
- // ----------------------------------
- // IID_IRangeList Interface Constants
- // ----------------------------------
- const ULONG RL_RANGE_ERROR = ((ULONG)-1); // [out] Indicates that no match could be found
- const ULONG RL_LAST_MESSAGE = ((ULONG)-1); // [in] Equivalent to "*" in an IMAP range list
- // ----------------------------------
- // IID_IRangeList Interface Functions
- // ----------------------------------
- //***********************************************************************
- // Function: Clear
- // Purpose: Clears all entries in the rangelist. Note that no memory
- // is freed by this operation.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT Clear(void);
- //***********************************************************************
- // Function: IsInRange
- // Purpose: Determines whether the given value is in the rangelist.
- // Arguments:
- // [in] const ULONG value - the value to test against the rangelist.
- //
- // Returns: S_OK if given value is in the rangelist, else S_FALSE.
- //***********************************************************************
- HRESULT IsInRange([in] const ULONG value);
- //***********************************************************************
- // Function: Min
- // Arguments:
- // [out] ULONG *pulMin - the minimum value in the rangelist is returned
- // here. For example, for the rangelist "10-20,31,44,50-65", this
- // function returns 10. If the rangelist is empty, a value of
- // RL_RANGE_ERROR is returned.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT Min([out] ULONG *pulMin);
- //***********************************************************************
- // Function: Max
- // Arguments:
- // [out] ULONG *pulMax - the maximum value in the rangelist is returned
- // here. For example, for the rangelist "10-20,31,44,50-65", this
- // function returns 65. If the rangelist is empty, a value of
- // RL_RANGE_ERROR is returned.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT Max([out] ULONG *pulMax); // return the maximum in-range value
- //***********************************************************************
- // Function: Save
- // Purpose: This function returns a copy of the internal rangelist
- // representation which may be loaded later via the Load() function.
- // NOTE THAT THE INTERNAL RANGELIST REPRESENTATION IS NOT SUITABLE FOR
- // NETWORK TRANSMITTAL.
- // Arguments:
- // [out] byte **ppbDestination - if successful, this function returns
- // a pointer to a copy of the internal rangelist representation
- // suitable for use with the Load() command (but not for
- // network transmittal).
- // [out] ULONG *pulSizeOfDestination - if successful, this function
- // returns the size of the data pointed to by *ppbDestination.
- //
- // Returns: HRESULT indicating success or failure. Failure to allocate
- // memory is typically the reason for failure.
- //***********************************************************************
- HRESULT Save([out] byte **ppbDestination,
- [out] ULONG *pulSizeOfDestination);
- //***********************************************************************
- // Function: Load
- // Purpose: This function loads the given internal rangelist
- // representation, obtained via the Save() function, thus restoring
- // the rangelist which was saved.
- // Arguments:
- // [in] byte *pbSource - a pointer to the internal rangelist
- // representation obtained using the Save() function.
- // [in] ULONG ulSizeOfSource - the size of the data pointed to by
- // pbSource.
- //
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT Load([in, size_is(ulSizeOfSource)] byte *pbSource,
- [in] const ULONG ulSizeOfSource);
- //***********************************************************************
- // Function: AddRange
- // Purpose: This function adds a range of values to the rangelist.
- // For example, to add 19-99 to the rangelist, call AddRange(19,99).
- // Arguments:
- // [in] ULONG low - low number of the range to add to the rangelist.
- // [in] ULONG high - high number of the range to add to the rangelist.
- //
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT AddRange([in] const ULONG low,
- [in] const ULONG high);
- //***********************************************************************
- // Function: AddSingleValue
- // Purpose: This function adds a single value to the rangelist.
- // For example, to add 69 to the rangelist, call AddRange(69).
- // Arguments:
- // [in] ULONG value - the single value to add to the rangelist.
- //
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT AddSingleValue([in] const ULONG value);
- //***********************************************************************
- // Function: AddRangeList
- // Purpose: This function adds a rangelist to the rangelist.
- // Arguments:
- // [in] IRangeList *prl - the rangelist to add to the rangelist.
- //
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT AddRangeList([in] const IRangeList *prl);
- //***********************************************************************
- // Function: DeleteRange
- // Purpose: This function deletes a range of values from the rangelist.
- // For example, to remove 7-11 from the rangelist, call DeleteRange(7,11).
- // Arguments:
- // [in] ULONG low - low number of the range to remove from the rangelist.
- // [in] ULONG high - high number of the range to remove from the rangelist.
- //
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT DeleteRange([in] const ULONG low,
- [in] const ULONG high);
- //***********************************************************************
- // Function: DeleteSingleValue
- // Purpose: This function removes a single value from the rangelist.
- // For example, to remove 42 to the rangelist, call DeleteRange(42).
- // Arguments:
- // [in] ULONG value - the single value to remove from the rangelist.
- //
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT DeleteSingleValue([in] const ULONG value);
- //***********************************************************************
- // Function: DeleteRangeList
- // Purpose: This function removes a rangelist from the rangelist.
- // Arguments:
- // [in] IRangeList *prl - the rangelist to remove from the rangelist.
- //
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT DeleteRangeList([in] const IRangeList *prl);
- //***********************************************************************
- // Function: MinOfRange
- // Purpose: This function finds the range that the given value belongs
- // to, and returns the minimum of that range. For example, for the
- // rangelist "10-20,30,40-50", MinOfRange(45) returns 40.
- // Arguments:
- // [in] ULONG value - a value in the range for which you would like to
- // find the minimum.
- // [out] ULONG *pulMinOfRange - the minimum value in the range of which
- // "value" is a member is returned here. If "value" is not in
- // the rangelist, a value of RL_RANGE_ERROR is returned.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT MinOfRange([in] const ULONG value,
- [out] ULONG *pulMinOfRange);
- //***********************************************************************
- // Function: MaxOfRange
- // Purpose: This function finds the range that the given value belongs
- // to, and returns the maximum of that range. For example, for the
- // rangelist "10-20,30,40-50", MaxOfRange(15) returns 20.
- // Arguments:
- // [in] ULONG value - a value in the range for which you would like to
- // find the maximum.
- // [out] ULONG *pulMaxOfRange - the maximum value in the range of which
- // "value" is a member is returned here. If "value" is not in the
- // rangelist, a value of RL_RANGE_ERROR is returned.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT MaxOfRange([in] const ULONG value,
- [out] ULONG *pulMaxOfRange);
- //***********************************************************************
- // Function: RangeToIMAPString
- // Purpose: This function outputs the rangelist as an IMAP message set,
- // as specified by the "set" terminal in RFC 1730/2060 (IMAP).
- // Arguments:
- // [out] LPSTR *ppszDestination - an IMAP message set string is
- // returned here. It is the responsibility of the caller to CoTaskMemFree
- // this buffer when he is done with it. Pass in NULL if not interested.
- // [out] LPDWORD pdwLengthOfDestination - the length of the IMAP
- // message set string returned by this function (does not include
- // null-terminator). Pass in NULL if not interested.
- // Returns: HRESULT indicating success or failure.
- //***********************************************************************
- HRESULT RangeToIMAPString([out] LPSTR *ppszDestination,
- [out] LPDWORD pdwLengthOfDestination);
- //***********************************************************************
- // Function: Next
- // Purpose: This function returns the smallest value in the rangelist
- // which is greater than the given value. For instance, for a rangelist
- // 5-10, the call Next(7) would return 8.
- // Arguments:
- // [in] ULONG current - the value for which you'd like to find the next
- // number in the rangelist.
- // [out] ULONG *pulNext - the smallest number in the rangelist greater
- // than "value" is returned here, or RL_RANGE_ERROR if no such
- // number could be found.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT Next([in] const ULONG current, [out] ULONG *pulNext);
- //***********************************************************************
- // Function: Prev
- // Purpose: This function returns the largest value in the rangelist
- // which is smaller than the given value. For instance, for a rangelist
- // 5-10, the call Prev(7) would return 6.
- // Arguments:
- // [in] ULONG current - the value for which you'd like to find the
- // previous number in the rangelist.
- // [out] ULONG *pulPrev - the largest number in the rangelist smaller
- // than "value" is returned here, or RL_RANGE_ERROR if no such
- // number could be found.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT Prev([in] const ULONG current, [out] ULONG *pulPrev);
- //***********************************************************************
- // Function: Cardinality
- // Purpose: This function counts the members in the rangelist set. For
- // example, for the rangelist 1-11, Cardinality() returns 11.
- // Arguments:
- // [out] ULONG *pulCardinality - The number of members in the
- // rangelist set is returned here.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT Cardinality(ULONG *pulCardinality);
- //***********************************************************************
- // Function: CardinalityFrom
- // Purpose: This function counts the members in the rangelist set which
- // are larger than the given starting point. For example, for the
- // rangelist 1-11, Cardinality(10) returns 2.
- // Arguments:
- // [in] ULONG ulStartPoint - represents 1 less than the lowest number
- // which should be considered in the cardinality count.
- // [out] ULONG *pulCardinalityFrom - The number of members in the
- // rangelist set which are larger than the given starting point
- // is returned here.
- // Returns: S_OK. This function cannot fail.
- //***********************************************************************
- HRESULT CardinalityFrom([in] const ULONG ulStartPoint,
- [out] ULONG *pulCardinalityFrom);
- } // interface IRangeList
- // ***************************************************************************************
- // ---------------------------------------------------------------------------------------
- // IID_IIMAPCallback
- // ---------------------------------------------------------------------------------------
- [
- uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9),
- helpstring("IMAP Callback Interface: used to notify an IID_IIMAPTransport client of IMAP server events."),
- local,
- ]
- interface IIMAPCallback : ITransportCallback
- {
- // -------------------------------------
- // IID_IIMAPCallback Interface Constants
- // -------------------------------------
- typedef DWORD IMAP_MBOXFLAGS; // Mailbox flags returned by the LIST/LSUB command
- const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x00000000;
- const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x00000001;
- const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x00000002;
- const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x00000004;
- const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x00000008;
- const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0x0000000F; // Keep this updated
- // --------------------------------------
- // IID_IIMAPCallback Interface Data Types
- // --------------------------------------
- // The following enumeration identifies the types of IMAP_RESPONSE structures
- typedef enum tagIMAP_RESPONSE_TYPE {
- irtERROR_NOTIFICATION, // Indicates an error has been encountered during response parsing
- irtCOMMAND_COMPLETION, // Indicates this IMAP command is completed
- irtSERVER_ALERT, // ALERT response (see IMAP spec)
- irtPARSE_ERROR, // PARSE response (see IMAP spec)
- irtMAILBOX_UPDATE, // EXISTS, RECENT, or UNSEEN responses (see IMAP spec)
- irtDELETED_MSG, // EXPUNGE response (see IMAP spec)
- irtFETCH_BODY, // Partial body from a message, returned via FETCH
- irtUPDATE_MSG, // FETCH response (see IMAP spec)
- irtAPPLICABLE_FLAGS, // FLAGS response (see IMAP spec)
- irtPERMANENT_FLAGS, // PERMANENTFLAGS response code (see IMAP spec)
- irtUIDVALIDITY, // UIDVALIDITY response code (see IMAP spec)
- irtREADWRITE_STATUS, // READ-WRITE or READ-ONLY response code (see IMAP spec)
- irtTRYCREATE, // TRYCREATE response code (see IMAP spec)
- irtSEARCH, // SEARCH response (see IMAP spec)
- irtMAILBOX_LISTING, // LIST or LSUB response (see IMAP spec)
- irtMAILBOX_STATUS, // STATUS response (see IMAP spec)
- irtAPPEND_PROGRESS, // Progress of APPEND stream upload
- irtUPDATE_MSG_EX // Extended FETCH response (see IMAP spec)
- } IMAP_RESPONSE_TYPE;
- // Fetch body part - body parts requested by the client are returned piece-by-piece
- // as they are received from the server, using this structure. After the entire FETCH
- // response is received, the client will also receive a FETCH_CMD_RESULTS structure
- // (see below) with the remaining requested information.
- typedef struct tagFETCH_BODY_PART {
- DWORD dwMsgSeqNum; // Message sequence number to which this FETCH resp applies
- LPSTR pszBodyTag; // Pointer to the IMAP tag identifying this body part (eg,
- // "RFC822.PEEK", or "BODY[2.2]<0.2048>"). NOTE that we terminate
- // the tag at the FIRST SPACE. This means that even though you sent
- // "BODY[HEADER.FIELDS (foo bar)]", the tag returned will only be
- // "BODY[HEADER.FIELDS".
- DWORD dwTotalBytes; // Total number of bytes expected for this body part
- DWORD dwSizeOfData; // The number of bytes pointed to by pszData
- DWORD dwOffset; // Offset of the start of this data buffer
- BOOL fDone; // TRUE when this is the last data buffer
- LPSTR pszData; // A pointer to the body part data
- LPARAM lpFetchCookie1; // User-settable values, initially set to 0. These will persist
- LPARAM lpFetchCookie2; // throughout the FETCH response, ie, for all FETCH_BODY_PART
- // responses (even if multiple body parts are fetched), and for
- // the final FETCH_CMD_RESULTS structure.
- } FETCH_BODY_PART;
- // Fetch results structure - holds data from a FETCH response. Since FETCH
- // responses can be unsolicited, the recipient must check that a data item is
- // valid before attempting to use it.
- typedef struct tagFETCH_CMD_RESULTS {
- DWORD dwMsgSeqNum; // Message sequence number to which this FETCH resp applies
- BOOL bMsgFlags; // TRUE if MsgFlags (below) contains valid data
- IMAP_MSGFLAGS mfMsgFlags; // Used to return the FLAGS tag of a FETCH response
- BOOL bRFC822Size; // TRUE if dwRFC822Size (below) contains valid data
- DWORD dwRFC822Size; // Used to return the RFC822.SIZE tag of a FETCH response
- BOOL bUID; // TRUE if dwUID (below) contains valid data
- DWORD dwUID; // Used to return the UID tag of a FETCH response
- BOOL bInternalDate; // TRUE if ftInternalDate (below) contains valid data
- FILETIME ftInternalDate; // Used to return the INTERNALDATE tag of a FETCH response
- LPARAM lpFetchCookie1; // User-settable values. These will persist throughout
- LPARAM lpFetchCookie2; // the FETCH, ie, for all FETCH_BODY_PART responses (even
- // if multiple body parts are fetched), and for the final
- // FETCH_CMD_RESULTS structure.
- } FETCH_CMD_RESULTS;
- typedef struct tagIMAPADDR {
- LPSTR pszName; // See formal syntax for "addr_name", RFC2060
- LPSTR pszADL; // See formal syntax for "addr_adl", RFC2060
- LPSTR pszMailbox; // See formal syntax for "addr_mailbox", RFC2060
- LPSTR pszHost; // See formal syntax for "addr_host", RFC2060
- struct tagIMAPADDR *pNext; // Pointer to next address
- } IMAPADDR;
- typedef struct tagFETCH_CMD_RESULTS_EX {
- // *** First part of this structure is exactly like FETCH_CMD_RESULTS ***
- DWORD dwMsgSeqNum; // Message sequence number to which this FETCH resp applies
- BOOL bMsgFlags; // TRUE if MsgFlags (below) contains valid data
- IMAP_MSGFLAGS mfMsgFlags; // Used to return the FLAGS tag of a FETCH response
- BOOL bRFC822Size; // TRUE if dwRFC822Size (below) contains valid data
- DWORD dwRFC822Size; // Used to return the RFC822.SIZE tag of a FETCH response
- BOOL bUID; // TRUE if dwUID (below) contains valid data
- DWORD dwUID; // Used to return the UID tag of a FETCH response
- BOOL bInternalDate; // TRUE if ftInternalDate (below) contains valid data
- FILETIME ftInternalDate; // Used to return the INTERNALDATE tag of a FETCH response
- LPARAM lpFetchCookie1; // User-settable values. These will persist throughout
- LPARAM lpFetchCookie2; // the FETCH, ie, for all FETCH_BODY_PART responses (even
- // if multiple body parts are fetched), and for the final
- // FETCH_CMD_RESULTS structure.
- // *** Second part of this structure contains the extensions ***
- BOOL bEnvelope; // TRUE if we received an ENVELOPE response
- FILETIME ftENVDate; // Date returned via ENVELOPE
- LPSTR pszENVSubject; // "Subject" returned via ENVELOPE
- IMAPADDR *piaENVFrom; // "From" addresses returned via ENVELOPE
- IMAPADDR *piaENVSender; // "Sender" addresses returned via ENVELOPE
- IMAPADDR *piaENVReplyTo; // "ReplyTo" addresses returned via ENVELOPE
- IMAPADDR *piaENVTo; // "To" addresses returned via ENVELOPE
- IMAPADDR *piaENVCc; // "Cc" addresses returned via ENVELOPE
- IMAPADDR *piaENVBcc; // "Bcc" addresses returned via ENVELOPE
- LPSTR pszENVInReplyTo; // "InReplyTo" returned via ENVELOPE
- LPSTR pszENVMessageID; // "MessageID" returned via ENVELOPE
- DWORD dwReserved1;
- DWORD dwReserved2;
- DWORD dwReserved3;
- } FETCH_CMD_RESULTS_EX;
- // The following structure is used to track and communicate EXISTS,
- // RECENT and UNSEEN responses from the IMAP server
- typedef struct tagMBOX_MSGCOUNT {
- BOOL bGotExistsResponse;
- DWORD dwExists;
- BOOL bGotRecentResponse;
- DWORD dwRecent;
- BOOL bGotUnseenResponse;
- DWORD dwUnseen;
- } MBOX_MSGCOUNT;
- // The following structure returns the results of a LIST or LSUB response
- typedef struct tagIMAP_LISTLSUB_RESPONSE {
- LPSTR pszMailboxName;
- IMAP_MBOXFLAGS imfMboxFlags;
- char cHierarchyChar;
- } IMAP_LISTLSUB_RESPONSE;
- // The following structure returns the results of a STATUS response
- typedef struct tagIMAP_STATUS_RESPONSE {
- LPSTR pszMailboxName;
- BOOL fMessages;
- DWORD dwMessages;
- BOOL fRecent;
- DWORD dwRecent;
- BOOL fUIDNext;
- DWORD dwUIDNext;
- BOOL fUIDValidity;
- DWORD dwUIDValidity;
- BOOL fUnseen;
- DWORD dwUnseen;
- } IMAP_STATUS_RESPONSE;
- // The following structure returns the progress of the current APPEND command
- typedef struct tagAPPEND_PROGRESS {
- DWORD dwUploaded;
- DWORD dwTotal;
- } APPEND_PROGRESS;
- // The following union can hold the results of many types of IMAP responses
- typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA {
- [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount; // For mailbox update (EXISTS, RECENT, UNSEEN) data
- [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum; // For EXPUNGE response data
- [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart; // For body parts (eg, RFC822) retrieved via FETCH
- [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults; // For message update (FETCH) data
- [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)]
- IMAP_MSGFLAGS imfImapMessageFlags; // For FLAGS response or PERMANENTFLAGS response code data
- [case (irtUIDVALIDITY)] DWORD dwUIDValidity; // For UIDVALIDITY response code data
- [case (irtREADWRITE_STATUS)] BOOL bReadWrite; // For READ-WRITE or READ-ONLY response code data
- [case (irtSEARCH)] IRangeList *prlSearchResults; // For SEARCH response data
- [case (irtMAILBOX_LISTING)]
- IMAP_LISTLSUB_RESPONSE illrdMailboxListing; // For LIST or LSUB response data
- [case (irtMAILBOX_STATUS)]
- IMAP_STATUS_RESPONSE *pisrStatusResponse; // For STATUS response data
- [case (irtAPPEND_PROGRESS)]
- APPEND_PROGRESS *papAppendProgress;
- [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX
- *pFetchResultsEx; // For message update (FETCH) data
- } IMAP_RESPONSE_DATA;
- // The following structure is used to represent all IMAP responses
- typedef struct tagIMAP_RESPONSE {
- WPARAM wParam; // This is 0 if unsolicited response or unresolvable
- LPARAM lParam; // This is 0 if unsolicited response or unresolvable
- HRESULT hrResult;
- LPSTR lpszResponseText;
- IMAP_RESPONSE_TYPE irtResponseType;
- [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData;
- } IMAP_RESPONSE;
- //-----------------------------------------------------------------------
- // IID_IIMAPCallback Interface Functions
- //-----------------------------------------------------------------------
- //***********************************************************************
- // Function: OnResponse
- // Purpose: This function is used to report IMAP server responses to
- // IMAP commands (or unsolicited responses).
- // Arguments:
- // [in] IMAP_RESPONSE *pirIMAPResponse - a pointer to an IMAP response
- // structure is returned to the IID_IIMAPTransport user via
- // this callback.
- // Returns: This function should always return S_OK.
- //***********************************************************************
- HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse);
- } // interface IIMAPCallback
- // ***************************************************************************************
- // ---------------------------------------------------------------------------------------
- // IID_IIMAPTransport
- // ---------------------------------------------------------------------------------------
- [
- uuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9),
- helpstring("IMAP Transport Interface: used to send IMAP commands to an IMAP server."),
- local,
- ]
- interface IIMAPTransport : IInternetTransport
- {
- // -------------------------------------
- // IID_IIMAPTransport Interface Constants
- // -------------------------------------
- // The following DWORDs are returned by IIMAPTransport::Capability
- const DWORD IMAP_CAPABILITY_IMAP4 = 0x00000001;
- const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x00000002;
- const DWORD IMAP_CAPABILITY_IDLE = 0x00000004;
- const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x00000007; // Keep this updated
- //-----------------------------------------------------------------------
- // IID_IIMAPTransport Interface Functions
- //-----------------------------------------------------------------------
- //***************************************************************************
- // Function: InitNew
- //
- // Purpose:
- // This function initializes the CImap4Agent class. This function
- // must be the next function called after instantiating the CImap4Agent class.
- //
- // Arguments:
- // LPSTR pszLogFilePath [in] - path to a log file (where all input and
- // output is logged), if the caller wishes to log IMAP transactions.
- // IIMAPCallback *pCBHandler [in] - pointer to a IIMAPCallback object.
- // This object allows the CImap4Agent class to report all IMAP response
- // results to its user.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT InitNew([in] LPSTR pszLogFilePath,
- [in] IIMAPCallback *pCBHandler);
- //***************************************************************************
- // Function: NewIRangeList
- //
- // Purpose:
- // This function returns a pointer to an IRangeList. Its purpose is to
- // allow full functionality from an IIMAPTransport pointer without needing
- // to resort to CoCreateInstance to get an IRangeList.
- //
- // Arguments:
- // IRangeList **pprlNewRangeList [out] - if successful, the function
- // returns a pointer to the new IRangeList.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT NewIRangeList([out] IRangeList **pprlNewRangeList);
- //***************************************************************************
- // Function: Capability
- //
- // Purpose:
- // The CImap4Agent class always asks for the server's CAPABILITIES after
- // a connection is established. The result is saved in a register and
- // is available by calling this function.
- //
- // Arguments:
- // [out] DWORD *pdwCapabilityFlags - this function returns a DWORD with
- // bit-flags specifying which capabilities this IMAP server
- // supports.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT Capability([out] DWORD *pdwCapabilityFlags);
- //***************************************************************************
- // Function: Select
- //
- // Purpose:
- // This function issues a SELECT command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxName - pointer to IMAP-compliant mailbox name
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Select([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName);
- //***************************************************************************
- // Function: Examine
- //
- // Purpose:
- // This function issues an EXAMINE command to the IMAP server.
- //
- // Arguments:
- // Same as for the Select() function.
- //
- // Returns:
- // Same as for the Select() function.
- //***************************************************************************
- HRESULT Examine([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName);
- //***************************************************************************
- // Function: Create
- //
- // Purpose:
- // This function issues a CREATE command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxName - IMAP-compliant name of the mailbox.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Create([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName);
- //***************************************************************************
- // Function: Delete
- //
- // Purpose:
- // This function issues a DELETE command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxName - IMAP-compliant name of the mailbox.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Delete([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName);
- //***************************************************************************
- // Function: Rename
- //
- // Purpose:
- // This function issues a RENAME command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxName - CURRENT IMAP-compliant name of the mailbox.
- // LPSTR lpszNewMailboxName - NEW IMAP-compliant name of the mailbox.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Rename([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName,
- [in] LPSTR lpszNewMailboxName);
- //***************************************************************************
- // Function: Subscribe
- //
- // Purpose:
- // This function issues a SUBSCRIBE command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxName - IMAP-compliant name of the mailbox.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Subscribe([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName);
- //***************************************************************************
- // Function: Unsubscribe
- //
- // Purpose:
- // This function issues an UNSUBSCRIBE command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxName - IMAP-compliant name of the mailbox.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Unsubscribe([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName);
- //***************************************************************************
- // Function: List
- //
- // Purpose:
- // This function issues a LIST command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxNameReference - IMAP-compliant reference for mbox name
- // LPSTR lpszMailboxNamePattern - IMAP-compliant pattern for mailbox name
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT List([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxNameReference,
- [in] LPSTR lpszMailboxNamePattern);
- //***************************************************************************
- // Function: Lsub
- //
- // Purpose:
- // This function issues a LSUB command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxNameReference - IMAP-compliant reference for mbox name
- // LPSTR lpszMailboxNamePattern - IMAP-compliant pattern for mailbox name.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Lsub([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxNameReference,
- [in] LPSTR lpszMailboxNamePattern);
- //***************************************************************************
- // Function: Append
- //
- // Purpose:
- // This function issues an APPEND command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszMailboxName - IMAP-compliant mailbox name to append message to.
- // LPSTR lpszMessageFlags - IMAP-compliant list of msg flags to set for msg.
- // Set to NULL to set no message flags. (Avoid passing "()" due to old Cyrus
- // server bug). $REVIEW: This should be changed to IMAP_MSGFLAGS!!!
- // FILETIME ftMessageDateTime - date/time to associate with msg (GMT/UTC)
- // LPSTREAM lpstmMessageToSave - the message to save, in RFC822 format.
- // No need to rewind the stream, this is done by CConnection::SendStream.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Append([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszMailboxName,
- [in] LPSTR lpszMessageFlags,
- [in] FILETIME ftMessageDateTime,
- [in] LPSTREAM lpstmMessageToSave);
- //***************************************************************************
- // Function: Close
- //
- // Purpose:
- // This function issues a CLOSE command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Close([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler);
- //***************************************************************************
- // Function: Expunge
- //
- // Purpose:
- // This function issues an EXPUNGE command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- //
- // Returns:
- // HRESULT indicating success or failure on send operation.
- //***************************************************************************
- HRESULT Expunge([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler);
- //***************************************************************************
- // Function: Search
- //
- // Purpose:
- // This function issues a SEARCH command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR lpszSearchCriteria - IMAP-compliant list of search criteria
- // boolean bReturnUIDs - if TRUE, we prepend "UID" to command.
- // IRangeList *pMsgRange [in] - range of messages over which to operate
- // the search. This argument should be NULL to exclude the message
- // set from the search criteria.
- // boolean bUIDRangeList [in] - TRUE if pMsgRange refers to a UID range,
- // FALSE if pMsgRange refers to a message sequence number range. If
- // pMsgRange is NULL, this argument is ignored.
- //
- // Returns:
- // HRESULT indicating success or failure on send operation.
- //***************************************************************************
- HRESULT Search([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR lpszSearchCriteria,
- [in] boolean bReturnUIDs,
- [in] IRangeList *pMsgRange,
- [in] boolean bUIDRangeList);
- //***************************************************************************
- // Function: Fetch
- //
- // Purpose:
- // This function issues a FETCH command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // IRangeList *pMsgRange [in] - range of messages to fetch. The caller
- // should pass NULL if he is using UIDs and he wants to generate his
- // own message set (in lpszFetchArgs). If the caller is using msg
- // seq nums, this argument MUST be specified to allow this class to
- // resequence the msg nums as required.
- // boolean bUIDMsgRange [in] - if TRUE, prepends "UID" to FETCH command and
- // treats pMsgRange as a UID range.
- // LPSTR lpszFetchArgs - arguments to the FETCH command
- //
- //
- // Returns:
- // HRESULT indicating success or failure of the send operation.
- //***************************************************************************
- HRESULT Fetch([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] IRangeList *pMsgRange,
- [in] boolean bUIDMsgRange,
- [in] LPSTR lpszFetchArgs);
- //***************************************************************************
- // Function: Store
- //
- // Purpose:
- // This function issues a STORE command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // IRangeList *pMsgRange [in] - range of messages to store. The caller
- // should pass NULL if he is using UIDs and he wants to generate his
- // own message set (in lpszStoreArgs). If the caller is using msg
- // seq nums, this argument MUST be specified to allow this class to
- // resequence the msg nums as required.
- // boolean bUIDRangeList [in] - if TRUE, we prepend "UID" to the STORE command
- // LPSTR lpszStoreArgs - arguments for the STORE command.
- //
- // Returns:
- // HRESULT indicating success or failure of the send operation.
- //***************************************************************************
- HRESULT Store([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] IRangeList *pMsgRange,
- [in] boolean bUIDRangeList,
- [in] LPSTR lpszStoreArgs);
- //***************************************************************************
- // Function: Copy
- //
- // Purpose:
- // This function issues a COPY command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // IRangeList *pMsgRange [in] - the range of messages to copy. This
- // argument must be supplied.
- // boolean bUIDRangeList [in] - if TRUE, prepends "UID" to COPY command
- // LPSTR lpszMailboxName [in] - C String of mailbox name
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Copy([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] IRangeList *pMsgRange,
- [in] boolean bUIDRangeList,
- [in] LPSTR lpszMailboxName);
- //***************************************************************************
- // Function: Noop
- //
- // Purpose:
- // This function issues a NOOP command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- //
- // Returns:
- // HRESULT indicating success or failure of send operation.
- //***************************************************************************
- HRESULT Noop([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler);
- //---------------------------------------------------------------------------
- // Message Sequence Number to UID member functions - the caller may use
- // these functions to map from MSN's to UID's, if the caller uses UIDs
- // to refer to messages. If the caller uses MSN's, there is no need to
- // invoke the following functions.
- //---------------------------------------------------------------------------
- //***************************************************************************
- // Function: ResizeMsgSeqNumTable
- //
- // Purpose:
- // This function is called whenever we receive an EXISTS response. It
- // resizes the MsgSeqNumToUID table to match the current size of the mailbox.
- //
- // Arguments:
- // DWORD dwSizeOfMbox [in] - the number returned via the EXISTS response.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT ResizeMsgSeqNumTable([in] DWORD dwSizeOfMbox);
- //***************************************************************************
- // Function: UpdateSeqNumToUID
- //
- // Purpose:
- // This function is called whenever we receive a FETCH response which has
- // both a message sequence number and a UID number. It updates the
- // MsgSeqNumToUID table so that given msg seq number maps to the given UID.
- //
- // Arguments:
- // DWORD dwMsgSeqNum [in] - the message sequence number of the FETCH
- // response.
- // DWORD dwUID [in] - the UID of the given message sequence number.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT UpdateSeqNumToUID([in] DWORD dwMsgSeqNum,
- [in] DWORD dwUID);
- //***************************************************************************
- // Function: RemoveSequenceNum
- //
- // Purpose:
- // This function is called whenever we receive an EXPUNGE response. It
- // removes the given message sequence number from the MsgSeqNumToUID table,
- // and compacts the table so that all message sequence numbers following
- // the deleted one are re-sequenced.
- //
- // Arguments:
- // DWORD dwDeletedMsgSeqNum [in] - message sequence number of deleted msg.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT RemoveSequenceNum([in] DWORD dwDeletedMsgSeqNum);
- //***************************************************************************
- // Function: MsgSeqNumToUID
- //
- // Purpose:
- // This function takes a message sequence number and converts it to a UID
- // based on the MsgSeqNumToUID table.
- //
- // Arguments:
- // DWORD dwMsgSeqNum [in] - the sequence number for which the caller wants
- // to know the UID.
- // DWORD *pdwUID [out] - the UID associated with the given sequence number
- // is returned here. If none could be found, this function returns 0.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT MsgSeqNumToUID([in] DWORD dwMsgSeqNum, [out] DWORD *pdwUID);
- //***************************************************************************
- // Function: GetMsgSeqNumToUIDArray
- //
- // Purpose:
- // This function returns a copy of the MsgSeqNumToUID array. The caller
- // will want to do this to delete messages from the cache which no longer
- // exist on the server, for example.
- //
- // Arguments:
- // DWORD **ppdwMsgSeqNumToUIDArray [out] - the function returns a pointer
- // to the copy of the MsgSeqNumToUID array in this argument. Note that
- // it is the caller's responsibility to MemFree the array. If no array
- // is available, or it is empty, the returned pointer value is NULL.
- // DWORD *pdwNumberOfElements [out] - the function returns the size of
- // the MsgSeqNumToUID array.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT GetMsgSeqNumToUIDArray([out] DWORD **ppdwMsgSeqNumToUIDArray,
- [out] DWORD *pdwNumberOfElements);
- //***************************************************************************
- // Function: GetHighestMsgSeqNum
- //
- // Purpose:
- // This function returns the highest message sequence number reported in
- // the MsgSeqNumToUID array.
- //
- // Arguments:
- // DWORD *pdwHighestMSN [out] - the highest message sequence number in the
- // table is returned here.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT GetHighestMsgSeqNum([out] DWORD *pdwHighestMSN);
- //***************************************************************************
- // Function: ResetMsgSeqNumToUID
- //
- // Purpose:
- // This function resets the variables used to maintain the MsgSeqNumToUID
- // table. This function is AUTOMATICALLY called whenever the MsgSeqNumToUID
- // table becomes invalid (say, when a new mailbox is selected, or we are
- // disconnected). This function shouldn't normally need to be called, but
- // I've placed it here just in case someone needs it.
- //
- // Returns:
- // S_OK. This function cannot fail.
- //***************************************************************************
- HRESULT ResetMsgSeqNumToUID(void);
- //---------------------------------------------------------------------------
- // Leaving Message Sequence Number to UID member functions zone
- //---------------------------------------------------------------------------
- //***************************************************************************
- // Function: SetDefaultCBHandler
- //
- // Purpose: This function changes the current default IIMAPCallback handler
- // to the given one.
- //
- // Arguments:
- // IIMAPCallback *pCBHandler [in] - a pointer to the new callback handler.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT SetDefaultCBHandler([in] IIMAPCallback *pCBHandler);
- //***************************************************************************
- // Function: Status
- //
- // Purpose:
- // This function issues a STATUS command to the IMAP server.
- //
- // Arguments:
- // WPARAM wParam [in] - (see below)
- // LPARAM lParam [in] - the wParam and lParam form a unique ID assigned by
- // the caller to this IMAP command and its responses. Can be anything,
- // but note that the value of 0, 0 is reserved for unsolicited responses.
- // IIMAPCallback *pCBHandler [in] - the CB handler to use to process the
- // responses for this command. If this is NULL, the default CB handler
- // is used.
- // LPSTR pszMailboxName [in] - the mailbox which you want to get the
- // STATUS of.
- // LPSTR pszStatusCmdArgs [in] - the arguments for the STATUS command,
- // eg, "(MESSAGES UNSEEN)".
- //
- // Returns:
- // HRESULT indicating success or failure of the send operation.
- //***************************************************************************
- HRESULT Status([in] WPARAM wParam,
- [in] LPARAM lParam,
- [in] IIMAPCallback *pCBHandler,
- [in] LPSTR pszMailboxName,
- [in] LPSTR pszStatusCmdArgs);
- } // interface IIMAPTransport
- // ***************************************************************************************
- // ---------------------------------------------------------------------------------------
- // IID_IIMAPTransport2
- // ---------------------------------------------------------------------------------------
- [
- uuid(DA8283C0-37C5-11d2-ACD9-0080C7B6E3C5),
- helpstring("IMAP Transport Interface 2: Extension to IIMAPTransport."),
- local,
- ]
- interface IIMAPTransport2 : IIMAPTransport
- {
- //-----------------------------------------------------------------------
- // IID_IIMAPTransport Interface Functions
- //-----------------------------------------------------------------------
- //***************************************************************************
- // Function: SetDefaultCP
- //
- // Purpose:
- // This function allows the caller to tell IIMAPTransport what codepage to
- // use for IMAP mailbox names. After calling this function, all mailbox names
- // submitted to IIMAPTransport will be translated from the default codepage,
- // and all mailbox names returned from the server will be translated to
- // the default codepage before being returned via IIMAPCallback.
- //
- // Arguments:
- // DWORD dwTranslateFlags [in] - enables/disables automatic translation to
- // and from default codepage and IMAP-modified UTF-7. If disabled, caller
- // wishes all mailbox names to be passed verbatim to/from IMAP server.
- // Note that by default we translate for IMAP4 servers, even with its
- // round-trippability problems, because this is how we used to do it
- // in the past.
- // UINT uiCodePage [in] - the default codepage to use for translations.
- // By default this value is the CP returned by GetACP().
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT SetDefaultCP([in] DWORD dwTranslateFlags,
- [in] UINT uiCodePage);
- // TranslateFlags
- const DWORD IMAP_MBOXXLATE_DEFAULT = 0x00000000; // Always translate, even for IMAP4
- const DWORD IMAP_MBOXXLATE_DISABLE = 0x00000001; // Always disable
- const DWORD IMAP_MBOXXLATE_DISABLEIMAP4 = 0x00000002; // Disable for IMAP4, translate for IMAP4rev1
- const DWORD IMAP_MBOXXLATE_VERBATIMOK = 0x00000004; // Non-translatable mbox names can be returned verbatim
- // Note if translation disabled, all mboxes will be
- // returned with IXP_S_IMAP_VERBATIM_MBOX
- const DWORD IMAP_MBOXXLATE_RETAINCP = 0x00000008; // Don't change codepage with this call
- //***************************************************************************
- // Function: MultiByteToModifiedUTF7
- //
- // Purpose:
- // This function takes a MultiByte string and converts it to modified IMAP
- // UTF7, which is described in RFC2060. This function is only needed if the
- // user has disabled transparent mailbox translation using SetDefaultCP(FALSE,0).
- //
- // Arguments:
- // LPCSTR pszSource [in] - pointer to the MultiByte string to convert to UTF7.
- // LPSTR *ppszDestination [out] - a pointer to a string buffer containing
- // the UTF7 equivalent of pszSource is returned here. It is the caller's
- // responsibility to MemFree this string.
- // UINT uiSourceCP [in] - indicates the codepage for pszSource
- // Note that no translation is performed if SetDefaultCP(FALSE,.) was called.
- // DWORD dwFlags [in] - Reserved. Leave as 0.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT MultiByteToModifiedUTF7([in] LPCSTR pszSource,
- [out] LPSTR *ppszDestination,
- [in] UINT uiSourceCP,
- [in] DWORD dwFlags);
- //***************************************************************************
- // Function: ModifiedUTF7ToMultiByte
- //
- // Purpose:
- // This function takes a modified IMAP UTF-7 string (as defined in RFC2060)
- // and converts it to a multi-byte string. This function is only needed if the
- // user has disabled transparent mailbox translation using SetDefaultCP(FALSE,0).
- //
- // Arguments:
- // LPCSTR pszSource [in] - a null-terminated string containing the modified
- // IMAP UTF-7 string to convert to multibyte.
- // LPSTR *ppszDestination [out] - this function returns a pointer to the
- // null-terminated multibyte string (in the system codepage) obtained
- // from pszSource. It is the caller's responsiblity to MemFree this
- // string when it is done with it.
- // UINT uiDestintationCP [in] - indicates the desired codepage for the
- // destination string. Note that no translation is performed if
- // SetDefaultCP(FALSE,.) was called.
- // DWORD dwFlags [in] - Reserved. Leave as 0.
- //
- // Returns:
- // HRESULT indicating success or failure. Success result codes include:
- // S_OK - pszSource successfully converted to modified UTF-7
- // IXP_S_IMAP_VERBATIM_MBOX - pszSource could not be converted to multibyte,
- // so ppszDestination contains a duplicate of pszSource. If target CP
- // is Unicode, pszSource is converted to Unicode with the assumption
- // that it is USASCII. IMAP_MBOXXLATE_VERBATIMOK must have been set via
- // SetDefaultCP in order to get this behaviour.
- //***************************************************************************
- HRESULT ModifiedUTF7ToMultiByte([in] LPCSTR pszSource,
- [out] LPSTR *ppszDestination,
- [in] UINT uiDestinationCP,
- [in] DWORD dwFlags);
- //***************************************************************************
- // Function: SetIdleMode
- //
- // Purpose:
- // The IMAP IDLE extension allows the server to unilaterally report changes
- // to the currently selected mailbox: new email, flag updates, and message
- // expunges. IIMAPTransport always enters IDLE mode when no IMAP commands
- // are pending, but it turns out that this can result in unnecessary
- // entry and exit of IDLE mode when the caller tries to sequence IMAP commands.
- // This function allows the caller to disable the use of the IDLE extension.
- //
- // Arguments:
- // DWORD dwIdleFlags [in] - enables or disables the use of the IDLE extension.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT SetIdleMode([in] DWORD dwIdleFlags);
- // Idle Flags
- const DWORD IMAP_IDLE_DISABLE = 0x00000000;
- const DWORD IMAP_IDLE_ENABLE = 0x00000001;
- //***************************************************************************
- // Function: EnableFetchEx
- //
- // Purpose:
- // IIMAPTransport only understood a subset of FETCH response tags. Notable
- // omissions included ENVELOPE and BODYSTRUCTURE. Calling this function
- // changes the behaviour of IIMAPTransport::Fetch. Instead of returning
- // FETCH responses via IIMAPCallback::OnResponse(irtUPDATE_MSG),
- // the FETCH response is returned via OnResponse(irtUPDATE_MSG_EX).
- // Other FETCH-related responses remain unaffected (eg, irtFETCH_BODY).
- //
- // Arguments:
- // DWORD dwFetchExFlags [in] - enables or disables FETCH extensions.
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT EnableFetchEx([in] DWORD dwFetchExFlags);
- // FetchEx flags
- const DWORD IMAP_FETCHEX_DISABLE = 0x00000000;
- const DWORD IMAP_FETCHEX_ENABLE = 0x00000001;
- //***************************************************************************
- // Function: SetWindow
- //
- // Purpose:
- // This function creates a new window for async winsock processing
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT SetWindow(void);
- //***************************************************************************
- // Function: ResetWindow
- //
- // Purpose:
- // This function closes a window for async winsock processing
- //
- // Returns:
- // HRESULT indicating success or failure.
- //***************************************************************************
- HRESULT ResetWindow(void);
- } // interface IIMAPTransport2
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// Exported C Functions")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("#if !defined(_IMNXPORT_)")
- cpp_quote("#define IMNXPORTAPI DECLSPEC_IMPORT HRESULT WINAPI")
- cpp_quote("#else")
- cpp_quote("#define IMNXPORTAPI HRESULT WINAPI")
- cpp_quote("#endif")
- cpp_quote("#ifdef __cplusplus")
- cpp_quote("extern \"C\" {")
- cpp_quote("#endif")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// CreateRASTransport")
- cpp_quote("// ")
- cpp_quote("// Description:")
- cpp_quote("// This method creates a IRASTransport object. The client must initialize the")
- cpp_quote("// object by calling IRASTransport::InitNew")
- cpp_quote("// ")
- cpp_quote("// Parameters:")
- cpp_quote("// ppTransport Upon successful return, contains the a pointer to")
- cpp_quote("// an IRASTransport interface")
- cpp_quote("// ")
- cpp_quote("// Return Values:")
- cpp_quote("// S_OK Successful.")
- cpp_quote("// E_INVALIDARG ppTransport is NULL")
- cpp_quote("// E_OUTOFMEMORY Memory allocation failure...")
- cpp_quote("// ")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("IMNXPORTAPI CreateRASTransport(")
- cpp_quote(" /* out */ IRASTransport **ppTransport);")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// CreateNNTPTransport")
- cpp_quote("// ")
- cpp_quote("// Description:")
- cpp_quote("// This method creates a INNTPTransport object. The client must initialize the")
- cpp_quote("// object by calling INNTPTransport::InitNew")
- cpp_quote("// ")
- cpp_quote("// Parameters:")
- cpp_quote("// ppTransport Upon successful return, contains the a pointer to")
- cpp_quote("// an INNTPTransport interface")
- cpp_quote("// ")
- cpp_quote("// Return Values:")
- cpp_quote("// S_OK Successful.")
- cpp_quote("// E_INVALIDARG ppTransport is NULL")
- cpp_quote("// E_OUTOFMEMORY Memory allocation failure...")
- cpp_quote("// ")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("IMNXPORTAPI CreateNNTPTransport(")
- cpp_quote(" /* out */ INNTPTransport **ppTransport);")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// CreateSMTPTransport")
- cpp_quote("// ")
- cpp_quote("// Description:")
- cpp_quote("// This method creates a ISMTPTransport object. The client must initialize the")
- cpp_quote("// object by calling ISMTPTransport::InitNew")
- cpp_quote("// ")
- cpp_quote("// Parameters:")
- cpp_quote("// ppTransport Upon successful return, contains the a pointer to")
- cpp_quote("// an ISMTPTransport interface")
- cpp_quote("// ")
- cpp_quote("// Return Values:")
- cpp_quote("// S_OK Successful.")
- cpp_quote("// E_INVALIDARG ppTransport is NULL")
- cpp_quote("// E_OUTOFMEMORY Memory allocation failure...")
- cpp_quote("// ")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("IMNXPORTAPI CreateSMTPTransport(")
- cpp_quote(" /* out */ ISMTPTransport **ppTransport);")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// CreatePOP3Transport")
- cpp_quote("// ")
- cpp_quote("// Description:")
- cpp_quote("// This method creates a IPOP3Transport object. The client must initialize the")
- cpp_quote("// object by calling IPOP3Transport::InitNew")
- cpp_quote("// ")
- cpp_quote("// Parameters:")
- cpp_quote("// ppTransport Upon successful return, contains the a pointer to")
- cpp_quote("// an IPOP3Transport interface")
- cpp_quote("// ")
- cpp_quote("// Return Values:")
- cpp_quote("// S_OK Successful.")
- cpp_quote("// E_INVALIDARG ppTransport is NULL")
- cpp_quote("// E_OUTOFMEMORY Memory allocation failure...")
- cpp_quote("// ")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("IMNXPORTAPI CreatePOP3Transport(")
- cpp_quote(" /* out */ IPOP3Transport **ppTransport);")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// CreateIMAPTransport")
- cpp_quote("// ")
- cpp_quote("// Description:")
- cpp_quote("// This method creates a IIMAPTransport object. The client must initialize the")
- cpp_quote("// object by calling IIMAPTransport::InitNew")
- cpp_quote("// ")
- cpp_quote("// Parameters:")
- cpp_quote("// ppTransport Upon successful return, contains the a pointer to")
- cpp_quote("// an IIMAPTransport interface")
- cpp_quote("// ")
- cpp_quote("// Return Values:")
- cpp_quote("// S_OK Successful.")
- cpp_quote("// E_INVALIDARG ppTransport is NULL")
- cpp_quote("// E_OUTOFMEMORY Memory allocation failure...")
- cpp_quote("// ")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("IMNXPORTAPI CreateIMAPTransport(")
- cpp_quote(" /* out */ IIMAPTransport **ppTransport);")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// CreateIMAPTransport2")
- cpp_quote("// ")
- cpp_quote("// Description:")
- cpp_quote("// This method creates an IIMAPTransport2 object. The client must initialize the")
- cpp_quote("// object by calling IIMAPTransport2::InitNew")
- cpp_quote("// ")
- cpp_quote("// Parameters:")
- cpp_quote("// ppTransport Upon successful return, contains the a pointer to")
- cpp_quote("// an IIMAPTransport2 interface")
- cpp_quote("// ")
- cpp_quote("// Return Values:")
- cpp_quote("// S_OK Successful.")
- cpp_quote("// E_INVALIDARG ppTransport is NULL")
- cpp_quote("// E_OUTOFMEMORY Memory allocation failure...")
- cpp_quote("// ")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("IMNXPORTAPI CreateIMAPTransport2(")
- cpp_quote(" /* out */ IIMAPTransport2 **ppTransport);")
- cpp_quote("")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("// CreateRangeList")
- cpp_quote("// ")
- cpp_quote("// Description:")
- cpp_quote("// This method creates a IRangeList object.")
- cpp_quote("// ")
- cpp_quote("// Parameters:")
- cpp_quote("// ppRangeList Upon successful return, contains the a pointer to")
- cpp_quote("// an IRangeList interface")
- cpp_quote("// ")
- cpp_quote("// Return Values:")
- cpp_quote("// S_OK Successful.")
- cpp_quote("// E_INVALIDARG ppRangeList is NULL")
- cpp_quote("// E_OUTOFMEMORY Memory allocation failure...")
- cpp_quote("// ")
- cpp_quote("// --------------------------------------------------------------------------------")
- cpp_quote("IMNXPORTAPI CreateRangeList(")
- cpp_quote(" /* out */ IRangeList **ppRangeList);")
- cpp_quote("")
- cpp_quote("#ifdef __cplusplus")
- cpp_quote("}")
- cpp_quote("#endif")
- cpp_quote("")
|