├── .gitignore ├── docs └── back.png ├── Indihiang ├── indhiang.ico ├── Images │ ├── Web.ico │ ├── dbs.ico │ ├── Folder.ico │ ├── Gear.ico │ ├── Globe.ico │ ├── error.ico │ ├── grafik.ico │ ├── help.ico │ ├── info.ico │ ├── root.ico │ ├── server.ico │ ├── start.ico │ ├── weblog.ico │ ├── Computer.ico │ ├── Messages.ico │ ├── flags │ │ ├── -.gif │ │ ├── Readme.txt │ │ ├── a1.gif │ │ ├── a2.gif │ │ ├── ad.gif │ │ ├── ae.gif │ │ ├── af.gif │ │ ├── ag.gif │ │ ├── ai.gif │ │ ├── al.gif │ │ ├── am.gif │ │ ├── an.gif │ │ ├── ao.gif │ │ ├── aq.gif │ │ ├── ar.gif │ │ ├── as.gif │ │ ├── at.gif │ │ ├── au.gif │ │ ├── aw.gif │ │ ├── ax.gif │ │ ├── az.gif │ │ ├── ba.gif │ │ ├── bb.gif │ │ ├── bd.gif │ │ ├── be.gif │ │ ├── bf.gif │ │ ├── bg.gif │ │ ├── bh.gif │ │ ├── bi.gif │ │ ├── bj.gif │ │ ├── bm.gif │ │ ├── bn.gif │ │ ├── bo.gif │ │ ├── br.gif │ │ ├── bs.gif │ │ ├── bt.gif │ │ ├── bv.gif │ │ ├── bw.gif │ │ ├── by.gif │ │ ├── bz.gif │ │ ├── ca.gif │ │ ├── cc.gif │ │ ├── cd.gif │ │ ├── cf.gif │ │ ├── cg.gif │ │ ├── ch.gif │ │ ├── ci.gif │ │ ├── ck.gif │ │ ├── cl.gif │ │ ├── cm.gif │ │ ├── cn.gif │ │ ├── co.gif │ │ ├── cr.gif │ │ ├── cs.gif │ │ ├── cu.gif │ │ ├── cv.gif │ │ ├── cx.gif │ │ ├── cy.gif │ │ ├── cz.gif │ │ ├── de.gif │ │ ├── dj.gif │ │ ├── dk.gif │ │ ├── dm.gif │ │ ├── do.gif │ │ ├── dz.gif │ │ ├── ec.gif │ │ ├── ee.gif │ │ ├── eg.gif │ │ ├── eh.gif │ │ ├── er.gif │ │ ├── es.gif │ │ ├── et.gif │ │ ├── eu.gif │ │ ├── fi.gif │ │ ├── fj.gif │ │ ├── fk.gif │ │ ├── fm.gif │ │ ├── fo.gif │ │ ├── fr.gif │ │ ├── ga.gif │ │ ├── gb.gif │ │ ├── gd.gif │ │ ├── ge.gif │ │ ├── gf.gif │ │ ├── gg.gif │ │ ├── gh.gif │ │ ├── gi.gif │ │ ├── gl.gif │ │ ├── gm.gif │ │ ├── gn.gif │ │ ├── gp.gif │ │ ├── gq.gif │ │ ├── gr.gif │ │ ├── gs.gif │ │ ├── gt.gif │ │ ├── gu.gif │ │ ├── gw.gif │ │ ├── gy.gif │ │ ├── hk.gif │ │ ├── hm.gif │ │ ├── hn.gif │ │ ├── hr.gif │ │ ├── ht.gif │ │ ├── hu.gif │ │ ├── id.gif │ │ ├── ie.gif │ │ ├── il.gif │ │ ├── im.gif │ │ ├── in.gif │ │ ├── io.gif │ │ ├── iq.gif │ │ ├── ir.gif │ │ ├── is.gif │ │ ├── it.gif │ │ ├── je.gif │ │ ├── jm.gif │ │ ├── jo.gif │ │ ├── jp.gif │ │ ├── ke.gif │ │ ├── kg.gif │ │ ├── kh.gif │ │ ├── ki.gif │ │ ├── km.gif │ │ ├── kn.gif │ │ ├── kp.gif │ │ ├── kr.gif │ │ ├── kw.gif │ │ ├── ky.gif │ │ ├── kz.gif │ │ ├── la.gif │ │ ├── lb.gif │ │ ├── lc.gif │ │ ├── li.gif │ │ ├── lk.gif │ │ ├── lr.gif │ │ ├── ls.gif │ │ ├── lt.gif │ │ ├── lu.gif │ │ ├── lv.gif │ │ ├── ly.gif │ │ ├── ma.gif │ │ ├── mc.gif │ │ ├── md.gif │ │ ├── me.gif │ │ ├── mg.gif │ │ ├── mh.gif │ │ ├── mk.gif │ │ ├── ml.gif │ │ ├── mm.gif │ │ ├── mn.gif │ │ ├── mo.gif │ │ ├── mp.gif │ │ ├── mq.gif │ │ ├── mr.gif │ │ ├── ms.gif │ │ ├── mt.gif │ │ ├── mu.gif │ │ ├── mv.gif │ │ ├── mw.gif │ │ ├── mx.gif │ │ ├── my.gif │ │ ├── mz.gif │ │ ├── na.gif │ │ ├── nc.gif │ │ ├── ne.gif │ │ ├── nf.gif │ │ ├── ng.gif │ │ ├── ni.gif │ │ ├── nl.gif │ │ ├── no.gif │ │ ├── np.gif │ │ ├── nr.gif │ │ ├── nu.gif │ │ ├── nz.gif │ │ ├── om.gif │ │ ├── pa.gif │ │ ├── pe.gif │ │ ├── pf.gif │ │ ├── pg.gif │ │ ├── ph.gif │ │ ├── pk.gif │ │ ├── pl.gif │ │ ├── pm.gif │ │ ├── pn.gif │ │ ├── pr.gif │ │ ├── ps.gif │ │ ├── pt.gif │ │ ├── pw.gif │ │ ├── py.gif │ │ ├── qa.gif │ │ ├── re.gif │ │ ├── ro.gif │ │ ├── rs.gif │ │ ├── ru.gif │ │ ├── rw.gif │ │ ├── sa.gif │ │ ├── sb.gif │ │ ├── sc.gif │ │ ├── sd.gif │ │ ├── se.gif │ │ ├── sg.gif │ │ ├── sh.gif │ │ ├── si.gif │ │ ├── sk.gif │ │ ├── sl.gif │ │ ├── sm.gif │ │ ├── sn.gif │ │ ├── so.gif │ │ ├── sr.gif │ │ ├── st.gif │ │ ├── sv.gif │ │ ├── sy.gif │ │ ├── sz.gif │ │ ├── tc.gif │ │ ├── td.gif │ │ ├── tf.gif │ │ ├── tg.gif │ │ ├── th.gif │ │ ├── tj.gif │ │ ├── tk.gif │ │ ├── tl.gif │ │ ├── tm.gif │ │ ├── tn.gif │ │ ├── to.gif │ │ ├── tp.gif │ │ ├── tr.gif │ │ ├── tt.gif │ │ ├── tv.gif │ │ ├── tw.gif │ │ ├── tz.gif │ │ ├── ua.gif │ │ ├── ug.gif │ │ ├── uk.gif │ │ ├── um.gif │ │ ├── us.gif │ │ ├── uy.gif │ │ ├── uz.gif │ │ ├── va.gif │ │ ├── vc.gif │ │ ├── ve.gif │ │ ├── vg.gif │ │ ├── vi.gif │ │ ├── vn.gif │ │ ├── vu.gif │ │ ├── wf.gif │ │ ├── ws.gif │ │ ├── ye.gif │ │ ├── yt.gif │ │ ├── yu.gif │ │ ├── za.gif │ │ ├── zm.gif │ │ ├── zr.gif │ │ ├── zw.gif │ │ └── unknown.gif │ ├── indhiang.ico │ ├── logfile.ico │ ├── logfiles.ico │ ├── Computers.ico │ ├── webserver.ico │ └── SingleMessage.ico ├── Data │ ├── ipcountry.db │ ├── indihiang.ind │ ├── log.indihiang │ ├── source.indihiang │ ├── dump_indihiang.dat │ ├── DataExportDestination.cs │ └── IndihiangDataExport.cs ├── Resources │ ├── main.jpg │ └── main2.jpg ├── ThirdParty │ ├── ZedGraph.dll │ ├── Oracle.DataAccess.dll │ └── System.Data.SQLite.lib ├── ParallelExtLib │ └── System.Threading.dll ├── DomainObject │ ├── NcsaLog.cs │ ├── IPCountry.cs │ ├── IndihiangVersion.cs │ ├── LogSource.cs │ ├── Shared.cs │ ├── Feature.cs │ ├── FeatureData.cs │ ├── LogData.cs │ ├── LogItem.cs │ ├── Indihiang.cs │ ├── IISInfo.cs │ └── W3cExtendedLog.cs ├── Cores │ ├── LogProcessStatus.cs │ ├── EnumLogFile.cs │ ├── Features │ │ ├── LogFeature.cs │ │ └── RequestFeature.cs │ ├── Logger.cs │ ├── LogInfoEventArgs.cs │ ├── W3cExtendedLogParser.cs │ ├── CollectionHelper.cs │ ├── ThreadBarrierExtensions.cs │ ├── LogParserFactory.cs │ └── RemoteFileCopyHelper.cs ├── Modules │ ├── BaseControl.cs │ ├── LoadingControl.cs │ ├── RenderInfoEventArgs.cs │ ├── LoadingControl.Designer.cs │ ├── GeneralControl.cs │ ├── RequestProcessingControl.cs │ ├── LoadingControl.resx │ ├── GeneralControl.resx │ └── WebLogUserControl.Designer.cs ├── Properties │ ├── Settings.settings │ ├── DataSources │ │ └── Indihiang.DomainObject.IISInfo1.datasource │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── packages.config ├── Forms │ ├── ConsolidateForm.cs │ ├── LightIndihiangForm.Designer.cs │ ├── LightIndihiangForm.cs │ ├── OpenRemoteIISForm.cs │ ├── AboutIndihiang.cs │ ├── ExportDataForm.cs │ ├── ConsolidateForm.Designer.cs │ ├── CheckLatestVersionForm.Designer.cs │ └── CheckLatestVersionForm.cs ├── IndihiangClassDiagram.cd ├── Program.cs └── App.config ├── .editorconfig ├── appveyor.yml ├── Readme.md ├── Indihiang.sln └── License.html /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea/ 2 | /.vs/ 3 | /packages/ 4 | 5 | bin/ 6 | obj/ 7 | -------------------------------------------------------------------------------- /docs/back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/docs/back.png -------------------------------------------------------------------------------- /Indihiang/indhiang.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/indhiang.ico -------------------------------------------------------------------------------- /Indihiang/Images/Web.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/Web.ico -------------------------------------------------------------------------------- /Indihiang/Images/dbs.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/dbs.ico -------------------------------------------------------------------------------- /Indihiang/Data/ipcountry.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Data/ipcountry.db -------------------------------------------------------------------------------- /Indihiang/Images/Folder.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/Folder.ico -------------------------------------------------------------------------------- /Indihiang/Images/Gear.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/Gear.ico -------------------------------------------------------------------------------- /Indihiang/Images/Globe.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/Globe.ico -------------------------------------------------------------------------------- /Indihiang/Images/error.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/error.ico -------------------------------------------------------------------------------- /Indihiang/Images/grafik.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/grafik.ico -------------------------------------------------------------------------------- /Indihiang/Images/help.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/help.ico -------------------------------------------------------------------------------- /Indihiang/Images/info.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/info.ico -------------------------------------------------------------------------------- /Indihiang/Images/root.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/root.ico -------------------------------------------------------------------------------- /Indihiang/Images/server.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/server.ico -------------------------------------------------------------------------------- /Indihiang/Images/start.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/start.ico -------------------------------------------------------------------------------- /Indihiang/Images/weblog.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/weblog.ico -------------------------------------------------------------------------------- /Indihiang/Data/indihiang.ind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Data/indihiang.ind -------------------------------------------------------------------------------- /Indihiang/Data/log.indihiang: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Data/log.indihiang -------------------------------------------------------------------------------- /Indihiang/Images/Computer.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/Computer.ico -------------------------------------------------------------------------------- /Indihiang/Images/Messages.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/Messages.ico -------------------------------------------------------------------------------- /Indihiang/Images/flags/-.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/-.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/Readme.txt: -------------------------------------------------------------------------------- 1 | These images file takses from 2 | http://www.ip2location.com/download/flags.zip -------------------------------------------------------------------------------- /Indihiang/Images/flags/a1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/a1.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/a2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/a2.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ad.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ae.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ae.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/af.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/af.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ag.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ai.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ai.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/al.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/al.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/am.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/am.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/an.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/an.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ao.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ao.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/aq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/aq.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ar.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/as.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/as.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/at.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/at.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/au.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/au.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/aw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/aw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ax.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ax.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/az.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/az.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ba.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ba.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bb.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bd.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/be.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/be.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bf.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bh.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bi.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bj.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bo.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/br.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/br.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bs.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bt.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bv.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/by.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/by.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/bz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/bz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ca.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ca.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cc.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cd.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cf.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ch.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ch.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ci.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ci.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ck.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ck.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cl.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/co.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/co.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cs.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cv.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cx.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cy.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/cz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/cz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/de.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/de.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/dj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/dj.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/dk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/dk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/dm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/dm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/do.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/do.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/dz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/dz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ec.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ec.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ee.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ee.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/eg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/eg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/eh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/eh.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/er.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/er.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/es.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/es.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/et.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/et.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/eu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/eu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/fi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/fi.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/fj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/fj.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/fk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/fk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/fm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/fm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/fo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/fo.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/fr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/fr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ga.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ga.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gb.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gd.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ge.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ge.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gf.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gh.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gi.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gl.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gp.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gq.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gs.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gt.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/gy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/gy.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/hk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/hk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/hm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/hm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/hn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/hn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/hr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/hr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ht.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ht.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/hu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/hu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/id.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/id.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ie.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ie.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/il.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/il.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/im.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/im.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/in.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/in.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/io.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/io.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/iq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/iq.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ir.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ir.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/is.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/is.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/it.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/it.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/je.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/je.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/jm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/jm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/jo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/jo.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/jp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/jp.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ke.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ke.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/kg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/kg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/kh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/kh.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ki.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ki.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/km.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/km.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/kn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/kn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/kp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/kp.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/kr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/kr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/kw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/kw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ky.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ky.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/kz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/kz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/la.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/la.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/lb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/lb.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/lc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/lc.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/li.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/li.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/lk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/lk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/lr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/lr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ls.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ls.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/lt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/lt.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/lu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/lu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/lv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/lv.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ly.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ly.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ma.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ma.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mc.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/md.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/md.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/me.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/me.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mh.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ml.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ml.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mo.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mp.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mq.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mq.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ms.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ms.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mt.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mv.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mx.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/my.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/my.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/mz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/mz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/na.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/na.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/nc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/nc.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ne.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ne.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/nf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/nf.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ng.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ng.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ni.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ni.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/nl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/nl.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/no.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/no.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/np.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/np.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/nr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/nr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/nu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/nu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/nz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/nz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/om.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/om.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pa.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pe.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pf.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ph.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ph.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pl.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ps.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ps.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pt.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/pw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/pw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/py.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/py.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/qa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/qa.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/re.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/re.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ro.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ro.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/rs.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/rs.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ru.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ru.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/rw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/rw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sa.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sb.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sc.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sd.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/se.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/se.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sh.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/si.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/si.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sl.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/so.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/so.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/st.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/st.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sv.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sy.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/sz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/sz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tc.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/td.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/td.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tf.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/th.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/th.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tj.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tj.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tl.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/to.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/to.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tp.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tt.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tv.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tw.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/tz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/tz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ua.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ua.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ug.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/uk.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/uk.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/um.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/um.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/us.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/us.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/uy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/uy.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/uz.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/uz.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/va.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/va.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/vc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/vc.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ve.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ve.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/vg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/vg.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/vi.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/vi.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/vn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/vn.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/vu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/vu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/wf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/wf.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ws.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ws.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/ye.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/ye.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/yt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/yt.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/yu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/yu.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/za.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/za.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/zm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/zm.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/zr.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/zr.gif -------------------------------------------------------------------------------- /Indihiang/Images/flags/zw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/zw.gif -------------------------------------------------------------------------------- /Indihiang/Images/indhiang.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/indhiang.ico -------------------------------------------------------------------------------- /Indihiang/Images/logfile.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/logfile.ico -------------------------------------------------------------------------------- /Indihiang/Images/logfiles.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/logfiles.ico -------------------------------------------------------------------------------- /Indihiang/Resources/main.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Resources/main.jpg -------------------------------------------------------------------------------- /Indihiang/Resources/main2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Resources/main2.jpg -------------------------------------------------------------------------------- /Indihiang/Data/source.indihiang: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Data/source.indihiang -------------------------------------------------------------------------------- /Indihiang/Images/Computers.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/Computers.ico -------------------------------------------------------------------------------- /Indihiang/Images/webserver.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/webserver.ico -------------------------------------------------------------------------------- /Indihiang/Data/dump_indihiang.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Data/dump_indihiang.dat -------------------------------------------------------------------------------- /Indihiang/Images/SingleMessage.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/SingleMessage.ico -------------------------------------------------------------------------------- /Indihiang/Images/flags/unknown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/Images/flags/unknown.gif -------------------------------------------------------------------------------- /Indihiang/ThirdParty/ZedGraph.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/ThirdParty/ZedGraph.dll -------------------------------------------------------------------------------- /Indihiang/ThirdParty/Oracle.DataAccess.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/ThirdParty/Oracle.DataAccess.dll -------------------------------------------------------------------------------- /Indihiang/ThirdParty/System.Data.SQLite.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/ThirdParty/System.Data.SQLite.lib -------------------------------------------------------------------------------- /Indihiang/ParallelExtLib/System.Threading.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ForNeVeR/Indihiang/HEAD/Indihiang/ParallelExtLib/System.Threading.dll -------------------------------------------------------------------------------- /Indihiang/DomainObject/NcsaLog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | 4 | namespace Indihiang.DomainObject 5 | { 6 | public class NcsaLog 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Indihiang/Data/DataExportDestination.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.Data 4 | { 5 | public enum DataExportDestination 6 | { 7 | SQLServer, 8 | Oracle 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Indihiang/Cores/LogProcessStatus.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.Cores 4 | { 5 | public enum LogProcessStatus 6 | { 7 | SUCCESS, 8 | FAILED, 9 | CANCELED 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Indihiang/Cores/EnumLogFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.Cores 4 | { 5 | public enum EnumLogFile 6 | { 7 | MSIISLOG, 8 | NCSA, 9 | W3CEXT, 10 | UNKNOWN 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 4 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.csproj] 11 | indent_size = 2 12 | insert_final_newline = false 13 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/IPCountry.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.DomainObject 4 | { 5 | public class IPCountry 6 | { 7 | public double IpStart { set; get; } 8 | public double IpEnd { set; get; } 9 | public string CoutryName { set; get; } 10 | 11 | public IPCountry() { } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Indihiang/Modules/BaseControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.Modules 4 | { 5 | public interface BaseControl 6 | { 7 | event EventHandler RenderHandler; 8 | string FeatureGuid { set; get; } 9 | string FileName { set; get; } 10 | 11 | void Populate(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Indihiang/Cores/Features/LogFeature.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.Cores.Features 4 | { 5 | public enum LogFeature 6 | { 7 | GENERAL, 8 | HITS, 9 | USERAGENT, 10 | STATUS, 11 | ACCESS, 12 | IPADDRESS, 13 | METHODS, 14 | BANDWIDTH, 15 | REQUEST, 16 | REFERER 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/IndihiangVersion.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace Indihiang.DomainObject 7 | { 8 | [Serializable] 9 | public class IndihiangVersion 10 | { 11 | public string Ver { set; get; } 12 | public string Url { set; get; } 13 | 14 | public IndihiangVersion() { } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | before_build: nuget restore 2 | configuration: Release 3 | artifacts: 4 | - path: Indihiang/bin/$(configuration) 5 | name: Binaries 6 | type: zip 7 | 8 | deploy: 9 | provider: GitHub 10 | auth_token: 11 | secure: ohhpsagvov/EMHRPK9VO/DE0VoB8VKgGqgilK8dDCRaS5KJdEPIUl0NpPuCFajlK 12 | artifact: Binaries 13 | on: 14 | appveyor_repo_tag: true 15 | configuration: Release 16 | -------------------------------------------------------------------------------- /Indihiang/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | False 7 | 8 | 9 | -------------------------------------------------------------------------------- /Indihiang/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Indihiang/Forms/ConsolidateForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace Indihiang.Forms 5 | { 6 | public partial class ConsolidateForm : Form 7 | { 8 | public string ConsolidationName 9 | { 10 | set 11 | { 12 | textBox1.Text = value; 13 | } 14 | get 15 | { 16 | return textBox1.Text; 17 | } 18 | } 19 | 20 | public ConsolidateForm() 21 | { 22 | InitializeComponent(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Indihiang/Properties/DataSources/Indihiang.DomainObject.IISInfo1.datasource: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | Indihiang.DomainObject.IISInfo, Indihiang, Version=0.2.3444.27624, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | Indihiang [![Build status][badge-appveyor]][build-appveyor] 2 | ========= 3 | 4 | Indihiang Project is a web log analyzing tool. The tool analyzes IIS and Apache 5 | Web servers in comprehensive graphs and reports. 6 | 7 | Project Features 8 | ---------------- 9 | 10 | - .NET Framework with C# as programming language 11 | - Web Log Viewer and analyzer 12 | - Web Log Consolidation 13 | - Web Log Real-time monitoring 14 | - Support for IIS6 and IIS7 15 | - Trend Data Analysis 16 | - Reporting 17 | 18 | ![Indihiang 1.0 Application][screenshot] 19 | 20 | [screenshot]: docs/back.png 21 | 22 | [build-appveyor]: https://ci.appveyor.com/project/ForNeVeR/indihiang/branch/master 23 | 24 | [badge-appveyor]: https://ci.appveyor.com/api/projects/status/r994nbs4tb71ivf8/branch/master?svg=true 25 | -------------------------------------------------------------------------------- /Indihiang/Cores/Logger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Reflection; 4 | namespace Indihiang.Cores 5 | { 6 | public class Logger 7 | { 8 | public static void Write(string message) 9 | { 10 | string path = string.Format("{0}\\Log\\", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); 11 | if (!Directory.Exists(path)) 12 | Directory.CreateDirectory(path); 13 | 14 | using (StreamWriter writer = new StreamWriter(string.Format("{0}{1}.log", path, DateTime.Now.ToString("yyyyMMdd")), true)) 15 | { 16 | string msg = string.Format("{0}: {1}", DateTime.Now.ToString("dd-MMM-yyyy HH:mm:ss"), message); 17 | writer.WriteLine(msg); 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Indihiang/Modules/LoadingControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace Indihiang.Modules 5 | { 6 | public partial class LoadingControl : UserControl 7 | { 8 | private int _proggress = 0; 9 | public LoadingControl() 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | public void Start() 15 | { 16 | _proggress = 0; 17 | timer1.Start(); 18 | } 19 | public void Stop() 20 | { 21 | timer1.Stop(); 22 | } 23 | 24 | private void timer1_Tick(object sender, EventArgs e) 25 | { 26 | _proggress++; 27 | if (_proggress > 100) 28 | _proggress = 0; 29 | progressBar1.Value = _proggress; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/LogSource.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.DomainObject 4 | { 5 | public class LogSource 6 | { 7 | private int _id; 8 | private string _sourceData; 9 | 10 | public int Id 11 | { 12 | get 13 | { 14 | return _id; 15 | } 16 | set 17 | { 18 | if (_id == value) 19 | return; 20 | _id = value; 21 | } 22 | } 23 | public string SourceData 24 | { 25 | get 26 | { 27 | return _sourceData; 28 | } 29 | set 30 | { 31 | if (_sourceData == value) 32 | return; 33 | _sourceData = value; 34 | } 35 | } 36 | 37 | public LogSource() { } 38 | 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Indihiang/Cores/LogInfoEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.Cores 4 | { 5 | public class LogInfoEventArgs : EventArgs 6 | { 7 | public string FileName { get; private set; } 8 | public EnumLogFile LogFormat { get; private set; } 9 | public string CalledMethod { get; private set; } 10 | public string Message { get; private set; } 11 | public LogProcessStatus LogStatus { get; set; } 12 | 13 | public LogInfoEventArgs(string fileName, EnumLogFile logFormat, LogProcessStatus logStatus,string calledMethod, string message) 14 | { 15 | FileName = fileName; 16 | LogFormat = logFormat; 17 | CalledMethod = calledMethod; 18 | Message = message; 19 | LogStatus = logStatus; 20 | } 21 | public LogInfoEventArgs() 22 | { 23 | 24 | } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Indihiang/IndihiangClassDiagram.cd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ABAgIAAAAAAAAAAIAAABAAAAAAiBAAAAAAAAIAAAAAA= 7 | Cores\BaseLogParser.cs 8 | 9 | 10 | 11 | 12 | 13 | AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAA= 14 | Cores\W3cExtendedLogParser.cs 15 | 16 | 17 | 18 | 19 | 20 | AAgAAAAAAAIAAYQAAgABAAABEIEAAAAAIBAAAABgAAA= 21 | Cores\LogParser.cs 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Indihiang/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | using Indihiang.Forms; 5 | 6 | namespace Indihiang 7 | { 8 | static class Program 9 | { 10 | /// 11 | /// The main entry point for the application. 12 | /// 13 | [STAThread] 14 | static void Main(string[] args) 15 | { 16 | Application.EnableVisualStyles(); 17 | Application.SetCompatibleTextRenderingDefault(false); 18 | 19 | Application.ThreadException += Application_ThreadException; 20 | 21 | //args = new string[] { @"C:\Users\Agus Kurniawan\Documents\PECollege\indihiang\Sample Log\ex081221.log" }; 22 | if (args.Length >= 1) 23 | Application.Run(new LightIndihiangForm(args[0])); 24 | else 25 | { 26 | Application.Run(new MainForm()); 27 | 28 | Indihiang.Properties.Settings.Default.Save(); 29 | } 30 | } 31 | 32 | static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 33 | { 34 | MessageBox.Show(e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/Shared.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | 4 | namespace Indihiang.DomainObject 5 | { 6 | public class Shared 7 | { 8 | private int _id; 9 | private string _name; 10 | private string _val; 11 | 12 | public int Id 13 | { 14 | get 15 | { 16 | return _id; 17 | } 18 | set 19 | { 20 | if (_id == value) 21 | return; 22 | _id = value; 23 | } 24 | } 25 | public string Name 26 | { 27 | get 28 | { 29 | return _name; 30 | } 31 | set 32 | { 33 | if (_name == value) 34 | return; 35 | _name = value; 36 | } 37 | } 38 | public string Val 39 | { 40 | get 41 | { 42 | return _val; 43 | } 44 | set 45 | { 46 | if (_val == value) 47 | return; 48 | _val = value; 49 | } 50 | } 51 | 52 | public Shared() { } 53 | 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/Feature.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | 4 | namespace Indihiang.DomainObject 5 | { 6 | public class Feature 7 | { 8 | private int _id; 9 | private string _name; 10 | private string _field; 11 | 12 | public int Id 13 | { 14 | get 15 | { 16 | return _id; 17 | } 18 | set 19 | { 20 | if (_id == value) 21 | return; 22 | _id = value; 23 | } 24 | } 25 | public string Name 26 | { 27 | get 28 | { 29 | return _name; 30 | } 31 | set 32 | { 33 | if (_name == value) 34 | return; 35 | _name = value; 36 | } 37 | } 38 | public string Field 39 | { 40 | get 41 | { 42 | return _field; 43 | } 44 | set 45 | { 46 | if (_field == value) 47 | return; 48 | _field = value; 49 | } 50 | } 51 | 52 | public Feature() { } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/FeatureData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.DomainObject 4 | { 5 | public class FeatureData 6 | { 7 | private int _id; 8 | private int _featureId; 9 | private string _val; 10 | 11 | public int Id 12 | { 13 | get 14 | { 15 | return _id; 16 | } 17 | set 18 | { 19 | if (_id == value) 20 | return; 21 | _id = value; 22 | } 23 | } 24 | public int FeatureId 25 | { 26 | get 27 | { 28 | return _featureId; 29 | } 30 | set 31 | { 32 | if (_featureId == value) 33 | return; 34 | _featureId = value; 35 | } 36 | } 37 | public string Val 38 | { 39 | get 40 | { 41 | return _val; 42 | } 43 | set 44 | { 45 | if (_val == value) 46 | return; 47 | _val = value; 48 | } 49 | } 50 | 51 | public FeatureData() { } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/LogData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.DomainObject 4 | { 5 | public class LogData 6 | { 7 | private int _id; 8 | private string _logDate; 9 | private string _logTime; 10 | 11 | public int Id 12 | { 13 | get 14 | { 15 | return _id; 16 | } 17 | set 18 | { 19 | if (_id == value) 20 | return; 21 | _id = value; 22 | } 23 | } 24 | public string LogDate 25 | { 26 | get 27 | { 28 | return _logDate; 29 | } 30 | set 31 | { 32 | if (_logDate == value) 33 | return; 34 | _logDate = value; 35 | } 36 | } 37 | public string LogTime 38 | { 39 | get 40 | { 41 | return _logTime; 42 | } 43 | set 44 | { 45 | if (_logTime == value) 46 | return; 47 | _logTime = value; 48 | } 49 | } 50 | 51 | public LogData() { } 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/LogItem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace Indihiang.DomainObject 7 | { 8 | public class LogItem 9 | { 10 | private int _id; 11 | private string _itemField; 12 | private string _itemValue; 13 | 14 | public int Id 15 | { 16 | get 17 | { 18 | return _id; 19 | } 20 | set 21 | { 22 | if (_id == value) 23 | return; 24 | _id = value; 25 | } 26 | } 27 | public string ItemField 28 | { 29 | get 30 | { 31 | return _itemField; 32 | } 33 | set 34 | { 35 | if (_itemField == value) 36 | return; 37 | _itemField = value; 38 | } 39 | } 40 | public string ItemValue 41 | { 42 | get 43 | { 44 | return _itemValue; 45 | } 46 | set 47 | { 48 | if (_itemValue == value) 49 | return; 50 | _itemValue = value; 51 | } 52 | } 53 | 54 | public LogItem() { } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Indihiang/Cores/W3cExtendedLogParser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Indihiang.Cores 5 | { 6 | public class W3cExtendedLogParser : BaseLogParser 7 | { 8 | 9 | public W3cExtendedLogParser(string logFile, EnumLogFile logFileFormat) 10 | : base(logFile, logFileFormat) 11 | { 12 | } 13 | 14 | protected override List ParseHeader(string line) 15 | { 16 | List list = null; 17 | 18 | if (string.IsNullOrEmpty(line)) 19 | return list; 20 | 21 | if (line.StartsWith("#Fields:")) 22 | { 23 | string temp = line.Substring(9); 24 | temp = temp.Trim(); 25 | string[] header = temp.Split(new char[] { ' ' }); 26 | 27 | if (header != null) 28 | if (header.Length > 0) 29 | { 30 | list = new List(); 31 | list.AddRange(header); 32 | } 33 | } 34 | 35 | return list; 36 | } 37 | 38 | 39 | protected override bool IsLogHeader(string line) 40 | { 41 | bool isHeader = false; 42 | 43 | if (string.IsNullOrEmpty(line)) 44 | return isHeader; 45 | 46 | if (line.StartsWith("#")) 47 | isHeader = true; 48 | 49 | return isHeader; 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Indihiang/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.1 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Indihiang.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 29 | public bool FindCountries { 30 | get { 31 | return ((bool)(this["FindCountries"])); 32 | } 33 | set { 34 | this["FindCountries"] = value; 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/Indihiang.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.DomainObject 4 | { 5 | public class Indihiang 6 | { 7 | private int _id; 8 | private string _sys_item; 9 | private string _sys_value; 10 | private DateTime _updateDate; 11 | 12 | public int Id 13 | { 14 | get 15 | { 16 | return _id; 17 | } 18 | set 19 | { 20 | if (_id == value) 21 | return; 22 | _id = value; 23 | } 24 | } 25 | public string Sys_Item 26 | { 27 | get 28 | { 29 | return _sys_item; 30 | } 31 | set 32 | { 33 | if (_sys_item == value) 34 | return; 35 | _sys_item = value; 36 | } 37 | } 38 | public string Sys_Value 39 | { 40 | get 41 | { 42 | return _sys_value; 43 | } 44 | set 45 | { 46 | if (_sys_value == value) 47 | return; 48 | _sys_value = value; 49 | } 50 | } 51 | public DateTime UpdateDate 52 | { 53 | get 54 | { 55 | return _updateDate; 56 | } 57 | set 58 | { 59 | if (_updateDate == value) 60 | return; 61 | _updateDate = value; 62 | } 63 | } 64 | 65 | 66 | public Indihiang() { } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /Indihiang/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Indhiang")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Indihiang, http://www.indihiang.com; Indihiang contributors")] 12 | [assembly: AssemblyProduct("Indihiang")] 13 | [assembly: AssemblyCopyright("Copyright © Agus Kurniawan 2009—2011, http://www.aguskurniawan.net; Indihiang contributors, 2011—2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("d0455ab0-3d9e-4389-866b-c3ca5f73e8a8")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.1.*")] 36 | [assembly: AssemblyFileVersion("1.1.0.0")] 37 | -------------------------------------------------------------------------------- /Indihiang/Modules/RenderInfoEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using Indihiang.Cores.Features; 4 | namespace Indihiang.Modules 5 | { 6 | public class RenderInfoEventArgs : EventArgs 7 | { 8 | private string _id; 9 | private LogFeature _feature; 10 | private string _fileName; 11 | 12 | public string Id 13 | { 14 | get 15 | { 16 | return _id; 17 | } 18 | set 19 | { 20 | if (_id == value) 21 | return; 22 | _id = value; 23 | } 24 | } 25 | public LogFeature Feature 26 | { 27 | get 28 | { 29 | return _feature; 30 | } 31 | set 32 | { 33 | if (_feature == value) 34 | return; 35 | _feature = value; 36 | } 37 | } 38 | public string FileName 39 | { 40 | get 41 | { 42 | return _fileName; 43 | } 44 | set 45 | { 46 | if (_fileName == value) 47 | return; 48 | _fileName = value; 49 | } 50 | } 51 | 52 | public RenderInfoEventArgs(string id, LogFeature feature, string fileName) 53 | { 54 | _id = id; 55 | _feature = feature; 56 | _fileName = fileName; 57 | } 58 | public RenderInfoEventArgs() 59 | { 60 | _id = Guid.NewGuid().ToString(); 61 | _feature = LogFeature.GENERAL; 62 | _fileName = string.Empty; 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Indihiang/Data/IndihiangDataExport.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Indihiang.Data 4 | { 5 | public abstract class IndihiangDataExport 6 | { 7 | protected string _databaseFile; 8 | protected string _svr; 9 | protected string _db; 10 | protected string _uid; 11 | protected string _pwd; 12 | protected string _errMessage; 13 | 14 | public string ErrMessage 15 | { 16 | get 17 | { 18 | return _errMessage; 19 | } 20 | set 21 | { 22 | if (_errMessage == value) 23 | return; 24 | _errMessage = value; 25 | } 26 | } 27 | protected IndihiangDataExport() { } 28 | 29 | 30 | public static IndihiangDataExport Create(DataExportDestination mode) 31 | { 32 | if (mode == DataExportDestination.SQLServer) 33 | return new SQLServerDataExport(); 34 | //if (mode == DataExportDestination.Oracle) 35 | // return new OracleDataExport(); 36 | 37 | return null; 38 | } 39 | 40 | public bool Export(string databaseFile,string server,string database,string uid,string pwd) 41 | { 42 | _databaseFile = databaseFile; 43 | _svr = server; 44 | _db = database; 45 | _uid = uid; 46 | _pwd = pwd; 47 | 48 | if (!CreateDatabase()) 49 | return false; 50 | 51 | if (!ExportData()) 52 | return false; 53 | 54 | return true; 55 | } 56 | 57 | 58 | protected abstract bool CreateDatabase(); 59 | protected abstract bool ExportData(); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Indihiang/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | False 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Indihiang/Cores/CollectionHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace Indihiang.Cores 6 | { 7 | public sealed class CollectionHelper 8 | { 9 | private CollectionHelper() { } 10 | 11 | public static Dictionary> SortList(Dictionary> data) 12 | { 13 | List>> result = new List>>(data); 14 | result.Sort( 15 | delegate( 16 | KeyValuePair> first, 17 | KeyValuePair> second) 18 | { 19 | double totalFirst = first.Value.Sum(); 20 | double totalSecond = second.Value.Sum(); 21 | 22 | if (totalSecond == totalFirst) 23 | return 0; 24 | if (totalSecond > totalFirst) 25 | return 1; 26 | 27 | return -1; 28 | } 29 | ); 30 | 31 | Dictionary> newList = new Dictionary>(); 32 | for (int i = 0; i < result.Count; i++) 33 | newList.Add(result[i].Key, result[i].Value); 34 | 35 | return newList; 36 | 37 | } 38 | public static Dictionary SortList(Dictionary data) 39 | { 40 | List> result = new List>(data); 41 | result.Sort( 42 | delegate( 43 | KeyValuePair first, 44 | KeyValuePair second) 45 | { 46 | return second.Value.CompareTo(first.Value); 47 | } 48 | ); 49 | 50 | Dictionary newList = new Dictionary(); 51 | for (int i = 0; i < result.Count; i++) 52 | newList.Add(result[i].Key, result[i].Value); 53 | 54 | return newList; 55 | 56 | } 57 | 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Indihiang.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio 15 3 | VisualStudioVersion = 15.0.27004.2009 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Indihiang", "Indihiang\Indihiang.csproj", "{C0C487B2-AB24-474A-AAEB-AA09C632EAD9}" 6 | EndProject 7 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{10127333-5B60-4D8D-8C12-51842EED50E0}" 8 | ProjectSection(SolutionItems) = preProject 9 | .gitignore = .gitignore 10 | appveyor.yml = appveyor.yml 11 | EndProjectSection 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|Any CPU = Debug|Any CPU 16 | Debug|x64 = Debug|x64 17 | Debug|x86 = Debug|x86 18 | Release|Any CPU = Release|Any CPU 19 | Release|x64 = Release|x64 20 | Release|x86 = Release|x86 21 | EndGlobalSection 22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 23 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Debug|x64.ActiveCfg = Debug|x64 26 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Debug|x64.Build.0 = Debug|x64 27 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Debug|x86.ActiveCfg = Debug|x86 28 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Debug|x86.Build.0 = Debug|x86 29 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Release|Any CPU.ActiveCfg = Release|Any CPU 30 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Release|Any CPU.Build.0 = Release|Any CPU 31 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Release|x64.ActiveCfg = Release|x64 32 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Release|x64.Build.0 = Release|x64 33 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Release|x86.ActiveCfg = Release|x86 34 | {C0C487B2-AB24-474A-AAEB-AA09C632EAD9}.Release|x86.Build.0 = Release|x86 35 | EndGlobalSection 36 | GlobalSection(SolutionProperties) = preSolution 37 | HideSolutionNode = FALSE 38 | EndGlobalSection 39 | GlobalSection(ExtensibilityGlobals) = postSolution 40 | SolutionGuid = {97C648C1-0511-4B8F-B871-F1322B16A1C4} 41 | EndGlobalSection 42 | EndGlobal 43 | -------------------------------------------------------------------------------- /Indihiang/Forms/LightIndihiangForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Indihiang.Forms 2 | { 3 | partial class LightIndihiangForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LightIndihiangForm)); 32 | this.webLogUserControl1 = new Indihiang.Modules.WebLogUserControl(); 33 | this.SuspendLayout(); 34 | // 35 | // webLogUserControl1 36 | // 37 | this.webLogUserControl1.Dock = System.Windows.Forms.DockStyle.Fill; 38 | this.webLogUserControl1.Location = new System.Drawing.Point(0, 0); 39 | this.webLogUserControl1.Name = "webLogUserControl1"; 40 | this.webLogUserControl1.Size = new System.Drawing.Size(903, 537); 41 | this.webLogUserControl1.TabIndex = 0; 42 | // 43 | // LightIndihiangForm 44 | // 45 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 46 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 47 | this.ClientSize = new System.Drawing.Size(903, 537); 48 | this.Controls.Add(this.webLogUserControl1); 49 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 50 | this.Name = "LightIndihiangForm"; 51 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 52 | this.Text = "Indihiang"; 53 | this.WindowState = System.Windows.Forms.FormWindowState.Maximized; 54 | this.Load += new System.EventHandler(this.LightIndihiangForm_Load); 55 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LightIndihiangForm_FormClosing); 56 | this.ResumeLayout(false); 57 | 58 | } 59 | 60 | #endregion 61 | 62 | private Indihiang.Modules.WebLogUserControl webLogUserControl1; 63 | } 64 | } -------------------------------------------------------------------------------- /Indihiang/Cores/ThreadBarrierExtensions.cs: -------------------------------------------------------------------------------- 1 | /// 2 | /// ThreadBarrierExtensions class is taken from 3 | /// http://blog.quantumbitdesigns.com/2008/07/22/simplifying-ui-and-worker-threads-delegatemarshaler-revisited/ 4 | /// 5 | 6 | using System; 7 | using System.Threading; 8 | 9 | namespace Indihiang.Cores 10 | { 11 | /// 12 | /// Provides extension method for raising an event using a SynchronizationContext 13 | /// 14 | public static class ThreadBarrierExtensions 15 | { 16 | /// 17 | /// Asynchronously posts a call to a method on a synchronization context 18 | /// 19 | /// The type of event args 20 | /// The SynchronizationContext to which the method will be posted 21 | /// The method to post to the provided SynchronizationContext 22 | /// The event args 23 | public static void Post(this SynchronizationContext synchronizationContext, Action action, T eventArgs) 24 | where T : EventArgs 25 | { 26 | //posting implies asynchronous so if no SynchronizationContext exists, 27 | //just post the method to a threadpool thread 28 | if (synchronizationContext == null) 29 | { 30 | ThreadPool.QueueUserWorkItem((e) => action((T)e), eventArgs); 31 | } 32 | else 33 | { 34 | synchronizationContext.Post((e) => action((T)e), eventArgs); 35 | 36 | //alternate technique 37 | //synchronizationContext.Post(delegate { action(eventArgs); }, null); 38 | } 39 | } 40 | 41 | /// 42 | /// Synchronously posts a call to a method on a synchronization context 43 | /// 44 | /// The type of event args 45 | /// The SynchronizationContext to which the method will be sent 46 | /// The method to send to the provided SynchronizationContext 47 | /// The event args 48 | public static void Send(this SynchronizationContext synchronizationContext, Action action, T eventArgs) 49 | where T : EventArgs 50 | { 51 | //if no SynchronizationContext exists, just call the method 52 | if (synchronizationContext == null) 53 | { 54 | action(eventArgs); 55 | } 56 | else 57 | { 58 | synchronizationContext.Send((e) => action((T)e), eventArgs); 59 | 60 | //alternate technique 61 | //synchronizationContext.Send(delegate { action(eventArgs); }, null); 62 | } 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /License.html: -------------------------------------------------------------------------------- 1 |

Microsoft Reciprocal License (Ms-RL)

2 | 3 |

Microsoft Reciprocal License (Ms-RL)

This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.

1. Definitions

The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.

A "contribution" is the original software, or any additions or changes to the software.

A "contributor" is any person that distributes its contribution under this license.

"Licensed patents" are a contributor's patent claims that read directly on its contribution.

2. Grant of Rights

(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.

(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.

3. Conditions and Limitations

(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.

(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.

(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.

(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.

(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.

4 | -------------------------------------------------------------------------------- /Indihiang/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.1 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Indihiang.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Indihiang.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | internal static System.Drawing.Bitmap main { 64 | get { 65 | object obj = ResourceManager.GetObject("main", resourceCulture); 66 | return ((System.Drawing.Bitmap)(obj)); 67 | } 68 | } 69 | 70 | internal static System.Drawing.Bitmap main2 { 71 | get { 72 | object obj = ResourceManager.GetObject("main2", resourceCulture); 73 | return ((System.Drawing.Bitmap)(obj)); 74 | } 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/IISInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | 4 | namespace Indihiang.DomainObject 5 | { 6 | public class IISInfo 7 | { 8 | private string _id; 9 | private string _serverComment; 10 | private string _logPath; 11 | private string _serverPort; 12 | private string _remoteServer; 13 | private string _iisUserId; 14 | private string _iisPassword; 15 | private bool _localComputer; 16 | 17 | public string Id 18 | { 19 | get 20 | { 21 | return _id; 22 | } 23 | set 24 | { 25 | if (_id == value) 26 | return; 27 | _id = value; 28 | } 29 | } 30 | public string ServerComment 31 | { 32 | get 33 | { 34 | return _serverComment; 35 | } 36 | set 37 | { 38 | if (_serverComment == value) 39 | return; 40 | _serverComment = value; 41 | } 42 | } 43 | public string LogPath 44 | { 45 | get 46 | { 47 | return _logPath; 48 | } 49 | set 50 | { 51 | if (_logPath == value) 52 | return; 53 | _logPath = value; 54 | } 55 | } 56 | public string ServerPort 57 | { 58 | get 59 | { 60 | return _serverPort; 61 | } 62 | set 63 | { 64 | if (_serverPort == value) 65 | return; 66 | _serverPort = value; 67 | } 68 | } 69 | public string RemoteServer 70 | { 71 | get 72 | { 73 | return _remoteServer; 74 | } 75 | set 76 | { 77 | if (_remoteServer == value) 78 | return; 79 | _remoteServer = value; 80 | } 81 | } 82 | 83 | public string IISUserId 84 | { 85 | get 86 | { 87 | return _iisUserId; 88 | } 89 | set 90 | { 91 | if (_iisUserId == value) 92 | return; 93 | _iisUserId = value; 94 | } 95 | } 96 | public string IISPassword 97 | { 98 | get 99 | { 100 | return _iisPassword; 101 | } 102 | set 103 | { 104 | if (_iisPassword == value) 105 | return; 106 | _iisPassword = value; 107 | } 108 | } 109 | public bool LocalComputer 110 | { 111 | get 112 | { 113 | return _localComputer; 114 | } 115 | set 116 | { 117 | if (_localComputer == value) 118 | return; 119 | _localComputer = value; 120 | } 121 | } 122 | 123 | public string IISInfoDisplay 124 | { 125 | get 126 | { 127 | if(_localComputer) 128 | return string.Format("{0} (http://localhost:{1})", _serverComment,_serverPort); 129 | 130 | return string.Format("{0} (http://{1}:{2})", _serverComment, _remoteServer,_serverPort); 131 | } 132 | } 133 | 134 | 135 | public IISInfo() 136 | { 137 | } 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /Indihiang/Forms/LightIndihiangForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using System.IO; 4 | 5 | using Indihiang.Cores; 6 | namespace Indihiang.Forms 7 | { 8 | public partial class LightIndihiangForm : Form 9 | { 10 | private string _fileName = ""; 11 | private LogParser _parser = new LogParser(); 12 | 13 | private delegate void UpdateText(string data); 14 | private UpdateText _delegate; 15 | private delegate void UpdateControl(); 16 | private UpdateControl _delegateControl; 17 | 18 | public LightIndihiangForm(string fileName) 19 | { 20 | _fileName = fileName; 21 | InitializeComponent(); 22 | 23 | _delegate = UpdateTextMethod; 24 | _delegateControl = UpdateControlMethod; 25 | } 26 | public LightIndihiangForm() 27 | { 28 | 29 | } 30 | 31 | private void LightIndihiangForm_Load(object sender, EventArgs e) 32 | { 33 | _parser.AnalyzeLogHandler += OnAnalyzeLog; 34 | _parser.EndAnalyzeHandler += OnEndAnalyze; 35 | 36 | if (File.Exists(_fileName)) 37 | RunAnalyer(); 38 | else 39 | this.Text = "Indihiang - No IIS log file.."; 40 | } 41 | 42 | private void RunAnalyer() 43 | { 44 | string name = Path.GetFileName(_fileName); 45 | 46 | Text = String.Format("Indihiang - {0}", name); 47 | _parser.FileName = _fileName; 48 | _parser.UseExistData = false; 49 | _parser.LogParserId = Guid.NewGuid(); 50 | _parser.UseParallel = true; 51 | _parser.Analyze(); 52 | } 53 | internal void OnAnalyzeLog(object sender, LogInfoEventArgs e) 54 | { 55 | string info = ""; 56 | 57 | switch (e.LogStatus) 58 | { 59 | case LogProcessStatus.SUCCESS: 60 | info = String.Format("{0:yyyy/MM/dd hh:mm:dd}[info]: {1}", DateTime.Now, e.Message); 61 | break; 62 | case LogProcessStatus.FAILED: 63 | info = String.Format("{0:yyyy/MM/dd hh:mm:dd}[err]: {1}", DateTime.Now, e.Message); 64 | break; 65 | case LogProcessStatus.CANCELED: 66 | info = String.Format("{0:yyyy/MM/dd hh:mm:dd}[info]: Log analyzer is canceled by user", DateTime.Now); 67 | break; 68 | } 69 | 70 | Invoke(this._delegate, new object[] { info }); 71 | } 72 | internal void OnEndAnalyze(object sender, LogInfoEventArgs e) 73 | { 74 | string info = ""; 75 | info = String.Format("{0:yyyy/MM/dd hh:mm:dd}[info]: Finish", DateTime.Now); 76 | 77 | Invoke(_delegate, new object[] { info }); 78 | Invoke(_delegateControl); 79 | } 80 | 81 | private void UpdateTextMethod(string data) 82 | { 83 | this.webLogUserControl1.AddLogStatus(data); 84 | } 85 | private void UpdateControlMethod() 86 | { 87 | this.webLogUserControl1.Populate(_parser); 88 | } 89 | 90 | private void LightIndihiangForm_FormClosing(object sender, FormClosingEventArgs e) 91 | { 92 | DialogResult dlg = MessageBox.Show("Are you sure to exit?", 93 | "Confirmation", 94 | MessageBoxButtons.YesNo, 95 | MessageBoxIcon.Question); 96 | 97 | if (dlg == DialogResult.Yes) 98 | { 99 | _parser.CancelAnalyze(); 100 | } 101 | else 102 | e.Cancel = true; 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /Indihiang/Modules/LoadingControl.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Indihiang.Modules 2 | { 3 | partial class LoadingControl 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Component Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | this.label1 = new System.Windows.Forms.Label(); 33 | this.progressBar1 = new System.Windows.Forms.ProgressBar(); 34 | this.timer1 = new System.Windows.Forms.Timer(this.components); 35 | this.panel1 = new System.Windows.Forms.Panel(); 36 | this.SuspendLayout(); 37 | // 38 | // label1 39 | // 40 | this.label1.AutoSize = true; 41 | this.label1.Location = new System.Drawing.Point(17, 20); 42 | this.label1.Name = "label1"; 43 | this.label1.Size = new System.Drawing.Size(153, 13); 44 | this.label1.TabIndex = 0; 45 | this.label1.Text = "Indihiang is analyzing web log.."; 46 | // 47 | // progressBar1 48 | // 49 | this.progressBar1.ForeColor = System.Drawing.Color.Green; 50 | this.progressBar1.Location = new System.Drawing.Point(20, 45); 51 | this.progressBar1.Name = "progressBar1"; 52 | this.progressBar1.Size = new System.Drawing.Size(329, 23); 53 | this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; 54 | this.progressBar1.TabIndex = 1; 55 | // 56 | // timer1 57 | // 58 | this.timer1.Tick += new System.EventHandler(this.timer1_Tick); 59 | // 60 | // panel1 61 | // 62 | this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 63 | this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; 64 | this.panel1.Location = new System.Drawing.Point(0, 0); 65 | this.panel1.Name = "panel1"; 66 | this.panel1.Size = new System.Drawing.Size(499, 172); 67 | this.panel1.TabIndex = 2; 68 | // 69 | // LoadingControl 70 | // 71 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 72 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 73 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); 74 | this.Controls.Add(this.progressBar1); 75 | this.Controls.Add(this.label1); 76 | this.Controls.Add(this.panel1); 77 | this.Name = "LoadingControl"; 78 | this.Size = new System.Drawing.Size(499, 172); 79 | this.ResumeLayout(false); 80 | this.PerformLayout(); 81 | 82 | } 83 | 84 | #endregion 85 | 86 | private System.Windows.Forms.Label label1; 87 | private System.Windows.Forms.ProgressBar progressBar1; 88 | private System.Windows.Forms.Timer timer1; 89 | private System.Windows.Forms.Panel panel1; 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /Indihiang/Forms/OpenRemoteIISForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Windows.Forms; 4 | using System.DirectoryServices; 5 | 6 | using Indihiang.DomainObject; 7 | namespace Indihiang.Forms 8 | { 9 | public partial class OpenRemoteIISForm : Form 10 | { 11 | private List _listIISInfo; 12 | 13 | public IISInfo IISSelected { get; private set; } 14 | public OpenRemoteIISForm() 15 | { 16 | InitializeComponent(); 17 | } 18 | 19 | private void btnConnect_Click(object sender, EventArgs e) 20 | { 21 | DirectoryEntry de = null; 22 | 23 | try 24 | { 25 | if (chkLocal.Checked) 26 | de = new DirectoryEntry("IIS://localhost/w3svc"); 27 | else 28 | de = new DirectoryEntry(string.Format("IIS://{0}/w3svc", txtComputerName.Text), 29 | txtUserId.Text, 30 | txtPassword.Text, 31 | AuthenticationTypes.Secure); 32 | 33 | de.RefreshCache(); 34 | 35 | _listIISInfo = new List(); 36 | foreach (DirectoryEntry child in de.Children) 37 | { 38 | if (child.Properties["KeyType"].Value.ToString() == "IIsWebServer") 39 | { 40 | IISInfo obj = new IISInfo(); 41 | obj.Id = child.Name; 42 | obj.ServerComment = child.Properties["ServerComment"].Value.ToString(); 43 | obj.LogPath = child.Properties["LogFileDirectory"].Value.ToString(); 44 | 45 | string ports = child.Properties["ServerBindings"].Value.ToString(); 46 | string[] port = ports.Split(new char[] { ':' }); 47 | if (port.Length > 1) 48 | obj.ServerPort = port[1]; 49 | 50 | if (chkLocal.Checked) 51 | obj.RemoteServer = "localhost"; 52 | else 53 | obj.RemoteServer = txtComputerName.Text; 54 | 55 | obj.LocalComputer = chkLocal.Checked; 56 | obj.IISUserId = txtUserId.Text; 57 | obj.IISPassword = txtPassword.Text; 58 | _listIISInfo.Add(obj); 59 | } 60 | } 61 | 62 | listWebsite.DataSource = _listIISInfo; 63 | } 64 | catch (Exception err) 65 | { 66 | MessageBox.Show(err.Message, "Error"); 67 | } 68 | 69 | } 70 | 71 | private void btnSelect_Click(object sender, EventArgs e) 72 | { 73 | if (listWebsite.SelectedItem != null) 74 | { 75 | IISSelected = (IISInfo)listWebsite.SelectedItem; 76 | DialogResult = DialogResult.OK; 77 | Close(); 78 | } 79 | else 80 | { 81 | MessageBox.Show("Please select website you want to analyze", "Information"); 82 | } 83 | } 84 | 85 | private void btnCancel_Click(object sender, EventArgs e) 86 | { 87 | Close(); 88 | } 89 | 90 | private void chkLocal_CheckStateChanged(object sender, EventArgs e) 91 | { 92 | if (chkLocal.Checked) 93 | { 94 | txtComputerName.ReadOnly = true; 95 | txtPassword.ReadOnly = true; 96 | txtUserId.ReadOnly = true; 97 | } 98 | else 99 | { 100 | txtComputerName.ReadOnly = false; 101 | txtPassword.ReadOnly = false; 102 | txtUserId.ReadOnly = false; 103 | } 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /Indihiang/Cores/LogParserFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Configuration; 5 | 6 | namespace Indihiang.Cores 7 | { 8 | public sealed class LogParserFactory 9 | { 10 | private LogParserFactory() { } 11 | 12 | public static BaseLogParser CreateParser(string logFile) 13 | { 14 | BaseLogParser baseParser = null; 15 | EnumLogFile logFormat = EnumLogFile.UNKNOWN; 16 | 17 | if (logFile.StartsWith("--")) 18 | { 19 | List listLogFormat = new List(); 20 | string tmp = logFile.Substring(2); 21 | string[] files = tmp.Split(new char[] { ';' }); 22 | 23 | for (int i = 0; i < files.Length; i++) 24 | { 25 | if (!string.IsNullOrEmpty(files[i])) 26 | { 27 | EnumLogFile tmpLog = GetLogFormat(files[i]); 28 | if (!listLogFormat.Contains(tmpLog)) 29 | listLogFormat.Add(tmpLog); 30 | } 31 | } 32 | 33 | // check double log format 34 | if (listLogFormat.Count > 1) 35 | return null; 36 | 37 | logFormat = listLogFormat[0]; 38 | } 39 | else 40 | logFormat = GetLogFormat(logFile); 41 | 42 | string asm = ConfigurationManager.AppSettings[logFormat.ToString()]; 43 | if(!string.IsNullOrEmpty(asm)) 44 | { 45 | object[] pars = new object[]{logFile,logFormat}; 46 | baseParser = (BaseLogParser)Activator.CreateInstance(Type.GetType(asm, true), pars); 47 | } 48 | 49 | return baseParser; 50 | } 51 | 52 | public static BaseLogParser CreateParserByType(EnumLogFile logFormat) 53 | { 54 | BaseLogParser baseParser = null; 55 | string asm = ConfigurationManager.AppSettings[logFormat.ToString()]; 56 | if (!string.IsNullOrEmpty(asm)) 57 | { 58 | object[] pars = new object[] { "", logFormat }; 59 | baseParser = (BaseLogParser)Activator.CreateInstance(Type.GetType(asm, true), pars); 60 | } 61 | 62 | return baseParser; 63 | } 64 | 65 | private static EnumLogFile GetLogFormat(string logFile) 66 | { 67 | EnumLogFile logFormat = EnumLogFile.UNKNOWN; 68 | 69 | if (File.Exists(logFile)) 70 | { 71 | bool bRead = false; 72 | DateTime dt = DateTime.Now; 73 | string strError = "(unknown)"; 74 | retry: 75 | if (((DateTime.Now - dt).TotalSeconds > 5) && (System.Windows.Forms.MessageBox.Show("Timed out trying to open log file:\n\n" + logFile + "\n\nError: " + strError + "\n\nTry again?", "Time out", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Warning, System.Windows.Forms.MessageBoxDefaultButton.Button1) != System.Windows.Forms.DialogResult.Yes)) 76 | return logFormat; 77 | try 78 | { 79 | //using (StreamReader sr = new StreamReader(logFile)) 80 | using (FileStream fs = File.Open(logFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 81 | { 82 | bRead = true; 83 | using (StreamReader sr = new StreamReader(fs)) 84 | { 85 | string l1 = sr.ReadLine(); 86 | string l2 = sr.ReadLine(); 87 | string l3 = sr.ReadLine(); 88 | if (l1.StartsWith("#") && l2.StartsWith("#") && l3.StartsWith("#")) 89 | logFormat = EnumLogFile.W3CEXT; 90 | } 91 | } 92 | } 93 | /*catch (IOException) 94 | { 95 | // 96 | }*/ 97 | catch (Exception ex) 98 | { 99 | strError = ex.Message; 100 | } 101 | 102 | if (bRead == false) 103 | goto retry; 104 | } 105 | 106 | return logFormat; 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /Indihiang/Forms/AboutIndihiang.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using System.Windows.Forms; 4 | 5 | namespace Indihiang.Forms 6 | { 7 | partial class AboutIndihiang : Form 8 | { 9 | public AboutIndihiang() 10 | { 11 | InitializeComponent(); 12 | Text = String.Format("About {0}", AssemblyTitle); 13 | labelProductName.Text = AssemblyProduct; 14 | labelVersion.Text = String.Format("Version {0}", FileVersion); 15 | labelAssemblyVersion.Text = String.Format("Assembly Version {0}", AssemblyVersion); 16 | labelCopyright.Text = AssemblyCopyright; 17 | labelCompanyName.Text = AssemblyCompany; 18 | } 19 | 20 | #region Assembly Attribute Accessors 21 | 22 | public string AssemblyTitle 23 | { 24 | get 25 | { 26 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 27 | if (attributes.Length > 0) 28 | { 29 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 30 | if (titleAttribute.Title != "") 31 | { 32 | return titleAttribute.Title; 33 | } 34 | } 35 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 36 | } 37 | } 38 | 39 | public string AssemblyVersion 40 | { 41 | get 42 | { 43 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 44 | } 45 | } 46 | 47 | public string AssemblyDescription 48 | { 49 | get 50 | { 51 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 52 | if (attributes.Length == 0) 53 | { 54 | return ""; 55 | } 56 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 57 | } 58 | } 59 | public string FileVersion 60 | { 61 | get 62 | { 63 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false); 64 | if (attributes.Length == 0) 65 | { 66 | return ""; 67 | } 68 | return ((AssemblyFileVersionAttribute)attributes[0]).Version; 69 | } 70 | } 71 | 72 | 73 | public string AssemblyProduct 74 | { 75 | get 76 | { 77 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 78 | if (attributes.Length == 0) 79 | { 80 | return ""; 81 | } 82 | return ((AssemblyProductAttribute)attributes[0]).Product; 83 | } 84 | } 85 | 86 | public string AssemblyCopyright 87 | { 88 | get 89 | { 90 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 91 | if (attributes.Length == 0) 92 | { 93 | return ""; 94 | } 95 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 96 | } 97 | } 98 | 99 | public string AssemblyCompany 100 | { 101 | get 102 | { 103 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 104 | if (attributes.Length == 0) 105 | { 106 | return ""; 107 | } 108 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 109 | } 110 | } 111 | #endregion 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /Indihiang/Modules/GeneralControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | using System.ComponentModel; 6 | using System.Threading; 7 | 8 | using Indihiang.Data; 9 | using Indihiang.Cores.Features; 10 | using Indihiang.Cores; 11 | namespace Indihiang.Modules 12 | { 13 | public partial class GeneralControl : UserControl, BaseControl 14 | { 15 | private SynchronizationContext _synContext; 16 | private List _listFiles = new List(); 17 | private List _listServers = new List(); 18 | private long _totalData; 19 | private List _listTime = new List(); 20 | 21 | private string _guid; 22 | private string _fileName; 23 | 24 | public List FileNames 25 | { 26 | get 27 | { 28 | return _listFiles; 29 | } 30 | set 31 | { 32 | if (_listFiles == value) 33 | return; 34 | 35 | _listFiles = value; 36 | } 37 | } 38 | 39 | public GeneralControl() 40 | { 41 | InitializeComponent(); 42 | _synContext = AsyncOperationManager.SynchronizationContext; 43 | } 44 | 45 | #region BaseControl Members 46 | public event EventHandler RenderHandler; 47 | 48 | public string FeatureGuid 49 | { 50 | get 51 | { 52 | return _guid; 53 | } 54 | set 55 | { 56 | _guid = value; 57 | } 58 | } 59 | 60 | public string FileName 61 | { 62 | get 63 | { 64 | return _fileName; 65 | } 66 | set 67 | { 68 | _fileName = value; 69 | } 70 | } 71 | public void Populate() 72 | { 73 | backgroundJob.RunWorkerAsync(); 74 | } 75 | #endregion 76 | 77 | protected virtual void OnRenderHandler(RenderInfoEventArgs e) 78 | { 79 | if (RenderHandler != null) 80 | RenderHandler(this, e); 81 | } 82 | 83 | private void ShowData() 84 | { 85 | listBoxFileName.Items.AddRange(_listFiles.ToArray()); 86 | listBoxIPAddress.Items.AddRange(_listServers.ToArray()); 87 | lbTotalFile.Text = String.Format("{0} files", _listFiles.Count); 88 | 89 | if (_totalData > 0) 90 | lbTotalData.Text = String.Format("{0} rows", _totalData); 91 | else 92 | lbTotalData.Text = "No data"; 93 | 94 | if (_listTime.Count > 0) 95 | { 96 | DateTime startDate = _listTime.Min(); 97 | DateTime endDate = _listTime.Max(); 98 | lbTime.Text = String.Format("{0:dd MMM yyyy} - {1:dd MMM yyyy}", startDate, endDate); 99 | } 100 | else 101 | lbTime.Text = "-"; 102 | 103 | RenderInfoEventArgs info = new RenderInfoEventArgs(_guid, LogFeature.GENERAL, _fileName); 104 | _synContext.Post(OnRenderHandler, info); 105 | 106 | } 107 | 108 | private void backgroundJob_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) 109 | { 110 | try 111 | { 112 | LogDataFacade facade = new LogDataFacade(_guid); 113 | _listServers = facade.GetServerList(); 114 | _listFiles = facade.GetLogFileList(); 115 | _totalData = facade.GetTotalData(); 116 | _listTime = facade.GetTimeLogFileList(); 117 | _listFiles = IndihiangHelper.ParseFile(_fileName); 118 | } 119 | catch (Exception err) 120 | { 121 | Logger.Write(err.Message); 122 | Logger.Write(err.StackTrace); 123 | 124 | System.Diagnostics.Debug.WriteLine(err.Message); 125 | } 126 | 127 | } 128 | 129 | private void backgroundJob_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) 130 | { 131 | ShowData(); 132 | } 133 | 134 | 135 | 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /Indihiang/Forms/ExportDataForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Windows.Forms; 5 | using System.Data.SqlClient; 6 | 7 | using Indihiang.Data; 8 | namespace Indihiang.Forms 9 | { 10 | public partial class ExportDataForm : Form 11 | { 12 | private int _proggress = 0; 13 | private List _logFiles; 14 | private DataExportDestination _target; 15 | private string _svr; 16 | private string _db; 17 | private string _uid; 18 | private string _pwd; 19 | 20 | public List LogFiles 21 | { 22 | get 23 | { 24 | return _logFiles; 25 | } 26 | set 27 | { 28 | if (_logFiles == value) 29 | return; 30 | _logFiles = value; 31 | } 32 | } 33 | public string DatabasePassword 34 | { 35 | get 36 | { 37 | return txtPassword.Text; 38 | } 39 | } 40 | public ExportDataForm() 41 | { 42 | InitializeComponent(); 43 | } 44 | 45 | private void btnTest_Click(object sender, EventArgs e) 46 | { 47 | try 48 | { 49 | string str = string.Format("server={0};uid={1};pwd={2}", 50 | txtDatabaseServer.Text, 51 | txtUserName.Text, 52 | txtPassword.Text); 53 | SqlConnection con = new SqlConnection(str); 54 | con.Open(); 55 | MessageBox.Show("Database can be contacted", "Database Test"); 56 | con.Close(); 57 | } 58 | catch (Exception err) 59 | { 60 | MessageBox.Show(err.Message, "Error"); 61 | } 62 | } 63 | 64 | private void btnExport_Click(object sender, EventArgs e) 65 | { 66 | btnExport.Enabled = false; 67 | btnTest.Enabled = false; 68 | btnCancel.Enabled = false; 69 | 70 | _svr = txtDatabaseServer.Text; 71 | _db = txtDbName.Text; 72 | _uid = txtUserName.Text; 73 | _pwd = txtPassword.Text; 74 | 75 | if (cboDbServer.SelectedItem.ToString() == "SQL Server") 76 | _target = DataExportDestination.SQLServer; 77 | 78 | _proggress = 0; 79 | timer1.Start(); 80 | backgroundWorker1.RunWorkerAsync(_logFiles); 81 | } 82 | 83 | private void btnCancel_Click(object sender, EventArgs e) 84 | { 85 | DialogResult = DialogResult.Cancel; 86 | Close(); 87 | } 88 | 89 | private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 90 | { 91 | try 92 | { 93 | List list = (List)e.Argument; 94 | 95 | bool success = true; 96 | IndihiangDataExport export = IndihiangDataExport.Create(_target); 97 | for (int i = 0; i < list.Count; i++) 98 | { 99 | if (!export.Export(list[i], _svr, _db, _uid, _pwd)) 100 | { 101 | e.Result = export.ErrMessage; 102 | success = false; 103 | break; 104 | } 105 | } 106 | if (success) 107 | e.Result = ""; 108 | } 109 | catch (Exception err) 110 | { 111 | System.Diagnostics.Debug.WriteLine(err.Message); 112 | e.Result = err.Message; 113 | } 114 | } 115 | 116 | private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 117 | { 118 | if(string.IsNullOrEmpty((string)e.Result)) 119 | MessageBox.Show("Export data was success","Confirmation"); 120 | else 121 | MessageBox.Show(e.Result.ToString(), "Error"); 122 | 123 | btnExport.Enabled = true; 124 | btnTest.Enabled = true; 125 | btnCancel.Enabled = true; 126 | timer1.Stop(); 127 | progressBar1.Value = 0; 128 | } 129 | 130 | private void timer1_Tick(object sender, EventArgs e) 131 | { 132 | _proggress++; 133 | if (_proggress > 100) 134 | _proggress = 0; 135 | progressBar1.Value = _proggress; 136 | } 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /Indihiang/Forms/ConsolidateForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Indihiang.Forms 2 | { 3 | partial class ConsolidateForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConsolidateForm)); 32 | this.label1 = new System.Windows.Forms.Label(); 33 | this.textBox1 = new System.Windows.Forms.TextBox(); 34 | this.btnSave = new System.Windows.Forms.Button(); 35 | this.btnCancel = new System.Windows.Forms.Button(); 36 | this.SuspendLayout(); 37 | // 38 | // label1 39 | // 40 | this.label1.AutoSize = true; 41 | this.label1.Location = new System.Drawing.Point(12, 25); 42 | this.label1.Name = "label1"; 43 | this.label1.Size = new System.Drawing.Size(272, 13); 44 | this.label1.TabIndex = 0; 45 | this.label1.Text = "You selected log files. Entry log files consolidation name:"; 46 | // 47 | // textBox1 48 | // 49 | this.textBox1.Location = new System.Drawing.Point(15, 51); 50 | this.textBox1.Name = "textBox1"; 51 | this.textBox1.Size = new System.Drawing.Size(339, 20); 52 | this.textBox1.TabIndex = 1; 53 | // 54 | // btnSave 55 | // 56 | this.btnSave.DialogResult = System.Windows.Forms.DialogResult.OK; 57 | this.btnSave.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 58 | this.btnSave.Location = new System.Drawing.Point(279, 90); 59 | this.btnSave.Name = "btnSave"; 60 | this.btnSave.Size = new System.Drawing.Size(75, 23); 61 | this.btnSave.TabIndex = 2; 62 | this.btnSave.Text = "Save"; 63 | this.btnSave.UseVisualStyleBackColor = true; 64 | // 65 | // btnCancel 66 | // 67 | this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 68 | this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 69 | this.btnCancel.Location = new System.Drawing.Point(198, 90); 70 | this.btnCancel.Name = "btnCancel"; 71 | this.btnCancel.Size = new System.Drawing.Size(75, 23); 72 | this.btnCancel.TabIndex = 3; 73 | this.btnCancel.Text = "Cancel"; 74 | this.btnCancel.UseVisualStyleBackColor = true; 75 | // 76 | // ConsolidateForm 77 | // 78 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 79 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 80 | this.ClientSize = new System.Drawing.Size(365, 137); 81 | this.Controls.Add(this.btnCancel); 82 | this.Controls.Add(this.btnSave); 83 | this.Controls.Add(this.textBox1); 84 | this.Controls.Add(this.label1); 85 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 86 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 87 | this.MaximizeBox = false; 88 | this.MinimizeBox = false; 89 | this.Name = "ConsolidateForm"; 90 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 91 | this.Text = "Log File Consolidation Form"; 92 | this.ResumeLayout(false); 93 | this.PerformLayout(); 94 | 95 | } 96 | 97 | #endregion 98 | 99 | private System.Windows.Forms.Label label1; 100 | private System.Windows.Forms.TextBox textBox1; 101 | private System.Windows.Forms.Button btnSave; 102 | private System.Windows.Forms.Button btnCancel; 103 | } 104 | } -------------------------------------------------------------------------------- /Indihiang/Cores/RemoteFileCopyHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Runtime.InteropServices; 4 | using System.Security.Principal; 5 | using System.Reflection; 6 | 7 | using Indihiang.DomainObject; 8 | namespace Indihiang.Cores 9 | { 10 | public sealed class RemoteFileCopyHelper 11 | { 12 | private RemoteFileCopyHelper() { } 13 | 14 | 15 | [DllImport("advapi32.DLL", SetLastError = true)] 16 | public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); 17 | 18 | 19 | public static bool CopyRemoteFiles(IISInfo iisInfo) 20 | { 21 | bool success = false; 22 | IntPtr admin_token = default(IntPtr); 23 | WindowsIdentity wid_current = WindowsIdentity.GetCurrent(); 24 | WindowsIdentity wid_admin = null; 25 | admin_token = wid_current.Token; 26 | WindowsImpersonationContext wic = null; 27 | 28 | try 29 | { 30 | 31 | string uid = ""; 32 | string domain = ""; 33 | string tmp = iisInfo.IISUserId; 34 | if (tmp.Contains("\\")) 35 | { 36 | string[] temp1 = tmp.Split(new char[] { '\\' }); 37 | if (temp1 != null) 38 | { 39 | uid = temp1[0]; 40 | domain = temp1[1]; 41 | } 42 | } 43 | else 44 | { 45 | uid = iisInfo.IISUserId; 46 | domain = iisInfo.RemoteServer; 47 | } 48 | 49 | if (LogonUser(uid, domain, iisInfo.IISPassword, 9, 0, ref admin_token) != 0) 50 | { 51 | ConfigureDestinationPath(iisInfo); 52 | 53 | string pathSource = ""; 54 | if (!iisInfo.LocalComputer) 55 | pathSource = iisInfo.LogPath.Replace(":", "$"); 56 | 57 | string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 58 | string pathDest = String.Format("{0}\\Temp\\{1}{2}\\", dir, iisInfo.RemoteServer, iisInfo.Id); 59 | 60 | wid_admin = new WindowsIdentity(admin_token); 61 | wic = wid_admin.Impersonate(); 62 | 63 | string[] files = null; 64 | files = Directory.GetFiles(String.Format("\\\\{0}\\{1}\\W3SVC{2}\\", iisInfo.RemoteServer, pathSource, iisInfo.Id)); 65 | 66 | //if (iisInfo.LocalComputer) 67 | //{ 68 | // files = Directory.GetFiles(String.Format("{0}\\W3SVC{1}\\", iisInfo.LogPath, iisInfo.Id)); 69 | //} 70 | //else 71 | // files = Directory.GetFiles(String.Format("\\\\{0}\\{1}\\W3SVC{2}\\", iisInfo.RemoteServer, pathSource,iisInfo.Id)); 72 | 73 | if (files != null) 74 | { 75 | Array.ForEach(files, s => 76 | { 77 | string fileName = Path.GetFileName(s); 78 | string destFile = Path.Combine(pathDest, fileName); 79 | File.Copy(s, destFile, true); 80 | }); 81 | } 82 | success = true; 83 | } 84 | 85 | } 86 | catch (Exception err) 87 | { 88 | System.Diagnostics.Debug.WriteLine(String.Format("Error CopyRemoteFiles: {0}", err.Message)); 89 | System.Diagnostics.Debug.WriteLine(String.Format("Error CopyRemoteFiles: {0}", err.StackTrace)); 90 | } 91 | 92 | return success; 93 | } 94 | 95 | private static void ConfigureDestinationPath(IISInfo iisInfo) 96 | { 97 | string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 98 | if (!Directory.Exists(String.Format("{0}\\Temp\\", path))) 99 | Directory.CreateDirectory(String.Format("{0}\\Temp\\", path)); 100 | 101 | if (!Directory.Exists(String.Format("{0}\\Temp\\{1}{2}\\", path, iisInfo.RemoteServer, iisInfo.Id))) 102 | Directory.CreateDirectory(String.Format("{0}\\Temp\\{1}{2}\\", path, iisInfo.RemoteServer, iisInfo.Id)); 103 | else 104 | { 105 | string[] filePaths = Directory.GetFiles(String.Format("{0}\\Temp\\{1}{2}\\", path, iisInfo.RemoteServer, iisInfo.Id)); 106 | Array.ForEach(filePaths, File.Delete); 107 | } 108 | 109 | } 110 | 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /Indihiang/Forms/CheckLatestVersionForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Indihiang.Forms 2 | { 3 | partial class CheckLatestVersionForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CheckLatestVersionForm)); 33 | this.progressBar1 = new System.Windows.Forms.ProgressBar(); 34 | this.lbStatus = new System.Windows.Forms.Label(); 35 | this.btnDownload = new System.Windows.Forms.Button(); 36 | this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker(); 37 | this.timer1 = new System.Windows.Forms.Timer(this.components); 38 | this.SuspendLayout(); 39 | // 40 | // progressBar1 41 | // 42 | this.progressBar1.Dock = System.Windows.Forms.DockStyle.Bottom; 43 | this.progressBar1.Location = new System.Drawing.Point(0, 107); 44 | this.progressBar1.Name = "progressBar1"; 45 | this.progressBar1.Size = new System.Drawing.Size(403, 23); 46 | this.progressBar1.TabIndex = 0; 47 | // 48 | // lbStatus 49 | // 50 | this.lbStatus.AutoSize = true; 51 | this.lbStatus.Location = new System.Drawing.Point(28, 28); 52 | this.lbStatus.Name = "lbStatus"; 53 | this.lbStatus.Size = new System.Drawing.Size(61, 13); 54 | this.lbStatus.TabIndex = 1; 55 | this.lbStatus.Text = "Checking..."; 56 | // 57 | // btnDownload 58 | // 59 | this.btnDownload.Location = new System.Drawing.Point(82, 69); 60 | this.btnDownload.Name = "btnDownload"; 61 | this.btnDownload.Size = new System.Drawing.Size(221, 23); 62 | this.btnDownload.TabIndex = 2; 63 | this.btnDownload.Text = "Download the latest Indihiang Application"; 64 | this.btnDownload.UseVisualStyleBackColor = true; 65 | this.btnDownload.Visible = false; 66 | this.btnDownload.Click += new System.EventHandler(this.btnDownload_Click); 67 | // 68 | // backgroundWorker1 69 | // 70 | this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); 71 | this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted); 72 | // 73 | // timer1 74 | // 75 | this.timer1.Tick += new System.EventHandler(this.timer1_Tick); 76 | // 77 | // CheckLatestVersionForm 78 | // 79 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 80 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 81 | this.ClientSize = new System.Drawing.Size(403, 130); 82 | this.Controls.Add(this.btnDownload); 83 | this.Controls.Add(this.lbStatus); 84 | this.Controls.Add(this.progressBar1); 85 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 86 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 87 | this.MaximizeBox = false; 88 | this.MinimizeBox = false; 89 | this.Name = "CheckLatestVersionForm"; 90 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 91 | this.Text = "Check Latest Version"; 92 | this.Load += new System.EventHandler(this.CheckLatestVersionForm_Load); 93 | this.ResumeLayout(false); 94 | this.PerformLayout(); 95 | 96 | } 97 | 98 | #endregion 99 | 100 | private System.Windows.Forms.ProgressBar progressBar1; 101 | private System.Windows.Forms.Label lbStatus; 102 | private System.Windows.Forms.Button btnDownload; 103 | private System.ComponentModel.BackgroundWorker backgroundWorker1; 104 | private System.Windows.Forms.Timer timer1; 105 | } 106 | } -------------------------------------------------------------------------------- /Indihiang/Forms/CheckLatestVersionForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Windows.Forms; 4 | using System.IO; 5 | using System.Net; 6 | using System.Xml.Serialization; 7 | using System.Diagnostics; 8 | using System.Reflection; 9 | 10 | namespace Indihiang.Forms 11 | { 12 | public partial class CheckLatestVersionForm : Form 13 | { 14 | private string _targetDownload; 15 | private string _ver; 16 | private int _proggress; 17 | 18 | public CheckLatestVersionForm() 19 | { 20 | InitializeComponent(); 21 | } 22 | 23 | private void timer1_Tick(object sender, EventArgs e) 24 | { 25 | _proggress++; 26 | if (_proggress > 100) 27 | _proggress = 0; 28 | progressBar1.Value = _proggress; 29 | } 30 | 31 | private void CheckLatestVersionForm_Load(object sender, EventArgs e) 32 | { 33 | backgroundWorker1.RunWorkerAsync(); 34 | timer1.Start(); 35 | } 36 | 37 | private void btnDownload_Click(object sender, EventArgs e) 38 | { 39 | ProcessStartInfo startInfo = new ProcessStartInfo(_targetDownload); 40 | System.Diagnostics.Process.Start(startInfo); 41 | Close(); 42 | } 43 | 44 | private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 45 | { 46 | string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 47 | string dir = string.Format("{0}\\temp\\", path); 48 | if (!Directory.Exists(dir)) 49 | Directory.CreateDirectory(dir); 50 | string file = string.Format("{0}ver.xml", dir); 51 | try 52 | { 53 | using (WebClient client = new WebClient()) 54 | { 55 | client.DownloadFile("http://www.indihiang.com/ver64.xml", file); 56 | } 57 | 58 | XmlSerializer xml = new XmlSerializer(typeof(Indihiang.DomainObject.IndihiangVersion)); 59 | Indihiang.DomainObject.IndihiangVersion obj; 60 | using (TextReader r = new StreamReader(file)) 61 | { 62 | obj = (Indihiang.DomainObject.IndihiangVersion)xml.Deserialize(r); 63 | 64 | Version current = Assembly.GetExecutingAssembly().GetName().Version; 65 | Version latest = new Version(obj.Ver); 66 | _targetDownload = ""; 67 | _ver = ""; 68 | CheckVersion(obj, current, latest); 69 | } 70 | 71 | 72 | e.Result = null; 73 | } 74 | catch (Exception err) 75 | { 76 | e.Result = err.Message; 77 | } 78 | } 79 | 80 | private void CheckVersion(Indihiang.DomainObject.IndihiangVersion obj, Version current, Version latest) 81 | { 82 | if (latest.Major > current.Major) 83 | { 84 | _targetDownload = obj.Url; 85 | _ver = obj.Ver; 86 | } 87 | else 88 | { 89 | if (latest.Major == current.Major) 90 | { 91 | if (latest.Minor > current.Minor) 92 | { 93 | _targetDownload = obj.Url; 94 | _ver = obj.Ver; 95 | } 96 | else 97 | { 98 | if (latest.Minor == current.Minor) 99 | { 100 | if (latest.Build > current.Build) 101 | { 102 | _targetDownload = obj.Url; 103 | _ver = obj.Ver; 104 | } 105 | else 106 | if (latest.Build == current.Build) 107 | { 108 | if (latest.Revision > current.Revision) 109 | { 110 | _targetDownload = obj.Url; 111 | _ver = obj.Ver; 112 | } 113 | } 114 | } 115 | } 116 | } 117 | } 118 | } 119 | 120 | private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 121 | { 122 | timer1.Stop(); 123 | progressBar1.Value = 0; 124 | 125 | if (e.Result != null) 126 | { 127 | MessageBox.Show(Convert.ToString(e.Result), "Error to check the latest Indihiang version"); 128 | return; 129 | } 130 | 131 | if (!string.IsNullOrEmpty(_targetDownload)) 132 | { 133 | lbStatus.Text = string.Format("The latest indihiang application is available {0}", _ver); 134 | btnDownload.Visible = true; 135 | } 136 | else 137 | { 138 | lbStatus.Text = "Your running appliation is the latest version"; 139 | } 140 | } 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /Indihiang/Modules/RequestProcessingControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Windows.Forms; 5 | using System.Threading; 6 | 7 | using Indihiang.Data; 8 | using Indihiang.DomainObject; 9 | using Indihiang.Cores; 10 | using Indihiang.Cores.Features; 11 | namespace Indihiang.Modules 12 | { 13 | public partial class RequestProcessingControl : UserControl, BaseControl 14 | { 15 | private SynchronizationContext _synContext; 16 | private string _guid; 17 | private string _fileName; 18 | private List _listYears = new List(); 19 | private List _listData; 20 | 21 | public RequestProcessingControl() 22 | { 23 | InitializeComponent(); 24 | _synContext = AsyncOperationManager.SynchronizationContext; 25 | } 26 | 27 | #region BaseControl Members 28 | public event EventHandler RenderHandler; 29 | 30 | public string FeatureGuid 31 | { 32 | get 33 | { 34 | return _guid; 35 | } 36 | set 37 | { 38 | _guid = value; 39 | } 40 | } 41 | 42 | public string FileName 43 | { 44 | get 45 | { 46 | return _fileName; 47 | } 48 | set 49 | { 50 | _fileName = value; 51 | } 52 | } 53 | public List ListOfYear 54 | { 55 | set 56 | { 57 | _listYears = value; 58 | } 59 | get 60 | { 61 | return _listYears; 62 | } 63 | } 64 | public void Populate() 65 | { 66 | cboParams1.Items.AddRange(_listYears.ToArray()); 67 | SetGridLayout(); 68 | 69 | RenderInfoEventArgs info = new RenderInfoEventArgs(_guid, LogFeature.REQUEST, _fileName); 70 | _synContext.Post(OnRenderHandler, info); 71 | } 72 | 73 | #endregion 74 | 75 | protected virtual void OnRenderHandler(RenderInfoEventArgs e) 76 | { 77 | if (RenderHandler != null) 78 | RenderHandler(this, e); 79 | } 80 | private void SetGridLayout() 81 | { 82 | dataGridViewRequest.ColumnCount = 5; 83 | dataGridViewRequest.Columns[0].Name = "Page Request"; 84 | dataGridViewRequest.Columns[0].Width = 200; 85 | dataGridViewRequest.Columns[0].ValueType = typeof(String); 86 | dataGridViewRequest.Columns[1].Name = "Query String"; 87 | dataGridViewRequest.Columns[1].Width = 120; 88 | dataGridViewRequest.Columns[1].ValueType = typeof(String); 89 | dataGridViewRequest.Columns[2].Name = "Mean Bytes Sent"; 90 | dataGridViewRequest.Columns[2].Width = 120; 91 | dataGridViewRequest.Columns[2].ValueType = typeof(Double); 92 | dataGridViewRequest.Columns[3].Name = "Mean Bytes Sent"; 93 | dataGridViewRequest.Columns[3].Width = 120; 94 | dataGridViewRequest.Columns[3].ValueType = typeof(Double); 95 | dataGridViewRequest.Columns[4].Name = "Mean Time Taken"; 96 | dataGridViewRequest.Columns[4].Width = 120; 97 | dataGridViewRequest.Columns[4].ValueType = typeof(Double); 98 | 99 | dataGridViewRequest.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 100 | dataGridViewRequest.MultiSelect = false; 101 | } 102 | 103 | private void GenerateProcessingData() 104 | { 105 | dataGridViewRequest.Rows.Clear(); 106 | 107 | if (_listData.Count > 0) 108 | { 109 | for (int i = 0; i < _listData.Count; i++) 110 | { 111 | List data = new List(); 112 | 113 | data.Add(_listData[i].Page_Access); 114 | data.Add(_listData[i].Query_Page_Access); 115 | data.Add((Double)((Double)_listData[i].Bytes_Sent / (Double)_listData[i].Total)); 116 | data.Add((Double)((Double)_listData[i].Bytes_Received / (Double)_listData[i].Total)); 117 | data.Add((Double)((Double)_listData[i].TimeTaken / (Double)_listData[i].Total)); 118 | 119 | dataGridViewRequest.Rows.Add(data.ToArray()); 120 | } 121 | } 122 | lbTotal.Text = string.Format("Total data: {0}", _listData.Count); 123 | lbTotal.Visible = true; 124 | _listData.Clear(); 125 | } 126 | 127 | private void btnGenerate1_Click(object sender, EventArgs e) 128 | { 129 | if (cboParams1.SelectedIndex < 0) 130 | { 131 | MessageBox.Show("Please choose year", "Information"); 132 | return; 133 | } 134 | btnGenerate1.Text = "Generating..."; 135 | btnGenerate1.Enabled = false; 136 | backgroundWorker1.RunWorkerAsync(cboParams1.SelectedItem); 137 | } 138 | 139 | private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 140 | { 141 | try 142 | { 143 | string par = e.Argument.ToString(); 144 | LogDataFacade facade = new LogDataFacade(_guid); 145 | 146 | _listData = new List(facade.GetRequestProcessingByYear(Convert.ToInt32(par))); 147 | } 148 | catch (Exception err) 149 | { 150 | Logger.Write(err.Message); 151 | Logger.Write(err.StackTrace); 152 | 153 | System.Diagnostics.Debug.WriteLine(err.Message); 154 | } 155 | } 156 | 157 | private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 158 | { 159 | if (_listData != null) 160 | { 161 | // populate 162 | GenerateProcessingData(); 163 | } 164 | 165 | btnGenerate1.Text = "Generate"; 166 | btnGenerate1.Enabled = true; 167 | } 168 | 169 | 170 | } 171 | } 172 | -------------------------------------------------------------------------------- /Indihiang/Modules/LoadingControl.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /Indihiang/Modules/GeneralControl.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /Indihiang/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\main.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\main2.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | -------------------------------------------------------------------------------- /Indihiang/Modules/WebLogUserControl.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Indihiang.Modules 2 | { 3 | partial class WebLogUserControl 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Component Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebLogUserControl)); 33 | this.panel1 = new System.Windows.Forms.Panel(); 34 | this.txtLog = new System.Windows.Forms.TextBox(); 35 | this.cboStatus = new System.Windows.Forms.ComboBox(); 36 | this.splitter1 = new System.Windows.Forms.Splitter(); 37 | this.panel2 = new System.Windows.Forms.Panel(); 38 | this.tabMainLog = new System.Windows.Forms.TabControl(); 39 | this.imageList1 = new System.Windows.Forms.ImageList(this.components); 40 | this.panel1.SuspendLayout(); 41 | this.panel2.SuspendLayout(); 42 | this.SuspendLayout(); 43 | // 44 | // panel1 45 | // 46 | this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 47 | this.panel1.Controls.Add(this.txtLog); 48 | this.panel1.Controls.Add(this.cboStatus); 49 | this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; 50 | this.panel1.Location = new System.Drawing.Point(0, 377); 51 | this.panel1.Name = "panel1"; 52 | this.panel1.Size = new System.Drawing.Size(848, 127); 53 | this.panel1.TabIndex = 0; 54 | // 55 | // txtLog 56 | // 57 | this.txtLog.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 58 | this.txtLog.Dock = System.Windows.Forms.DockStyle.Fill; 59 | this.txtLog.Location = new System.Drawing.Point(0, 21); 60 | this.txtLog.MaxLength = 0; 61 | this.txtLog.Multiline = true; 62 | this.txtLog.Name = "txtLog"; 63 | this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Both; 64 | this.txtLog.Size = new System.Drawing.Size(846, 104); 65 | this.txtLog.TabIndex = 1; 66 | // 67 | // cboStatus 68 | // 69 | this.cboStatus.Dock = System.Windows.Forms.DockStyle.Top; 70 | this.cboStatus.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 71 | this.cboStatus.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 72 | this.cboStatus.FormattingEnabled = true; 73 | this.cboStatus.Items.AddRange(new object[] { 74 | "Log Status"}); 75 | this.cboStatus.Location = new System.Drawing.Point(0, 0); 76 | this.cboStatus.Name = "cboStatus"; 77 | this.cboStatus.Size = new System.Drawing.Size(846, 21); 78 | this.cboStatus.TabIndex = 0; 79 | // 80 | // splitter1 81 | // 82 | this.splitter1.Dock = System.Windows.Forms.DockStyle.Bottom; 83 | this.splitter1.Location = new System.Drawing.Point(0, 371); 84 | this.splitter1.Name = "splitter1"; 85 | this.splitter1.Size = new System.Drawing.Size(848, 6); 86 | this.splitter1.TabIndex = 1; 87 | this.splitter1.TabStop = false; 88 | // 89 | // panel2 90 | // 91 | this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 92 | this.panel2.Controls.Add(this.tabMainLog); 93 | this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; 94 | this.panel2.Location = new System.Drawing.Point(0, 0); 95 | this.panel2.Name = "panel2"; 96 | this.panel2.Size = new System.Drawing.Size(848, 371); 97 | this.panel2.TabIndex = 2; 98 | // 99 | // tabMainLog 100 | // 101 | this.tabMainLog.Appearance = System.Windows.Forms.TabAppearance.FlatButtons; 102 | this.tabMainLog.Dock = System.Windows.Forms.DockStyle.Fill; 103 | this.tabMainLog.ImageList = this.imageList1; 104 | this.tabMainLog.Location = new System.Drawing.Point(0, 0); 105 | this.tabMainLog.Name = "tabMainLog"; 106 | this.tabMainLog.SelectedIndex = 0; 107 | this.tabMainLog.Size = new System.Drawing.Size(846, 369); 108 | this.tabMainLog.TabIndex = 0; 109 | // 110 | // imageList1 111 | // 112 | this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); 113 | this.imageList1.TransparentColor = System.Drawing.Color.Transparent; 114 | this.imageList1.Images.SetKeyName(0, "preferences.ico"); 115 | this.imageList1.Images.SetKeyName(1, "start.ico"); 116 | // 117 | // WebLogUserControl 118 | // 119 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 120 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 121 | this.Controls.Add(this.panel2); 122 | this.Controls.Add(this.splitter1); 123 | this.Controls.Add(this.panel1); 124 | this.Name = "WebLogUserControl"; 125 | this.Size = new System.Drawing.Size(848, 504); 126 | this.Load += new System.EventHandler(this.WebLogUserControl_Load); 127 | this.panel1.ResumeLayout(false); 128 | this.panel1.PerformLayout(); 129 | this.panel2.ResumeLayout(false); 130 | this.ResumeLayout(false); 131 | 132 | } 133 | 134 | #endregion 135 | 136 | private System.Windows.Forms.Panel panel1; 137 | private System.Windows.Forms.Splitter splitter1; 138 | private System.Windows.Forms.Panel panel2; 139 | private System.Windows.Forms.ComboBox cboStatus; 140 | private System.Windows.Forms.TabControl tabMainLog; 141 | private System.Windows.Forms.TextBox txtLog; 142 | private System.Windows.Forms.ImageList imageList1; 143 | 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /Indihiang/Cores/Features/RequestFeature.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | 5 | namespace Indihiang.Cores.Features 6 | { 7 | public class RequestFeature : BaseLogAnalyzeFeature 8 | { 9 | private Guid _parserId = Guid.NewGuid(); 10 | 11 | public RequestFeature(EnumLogFile logFile) 12 | : base(logFile) 13 | { 14 | _featureName = LogFeature.REQUEST; 15 | 16 | LogCollection log = new LogCollection(); 17 | _logs.Add("TimeTaken", log); 18 | } 19 | 20 | public RequestFeature(EnumLogFile logFile,Guid parserId) 21 | : base(logFile) 22 | { 23 | _parserId = parserId; 24 | _featureName = LogFeature.REQUEST; 25 | 26 | LogCollection log = new LogCollection(); 27 | _logs.Add("TimeTaken", log); 28 | } 29 | 30 | 31 | protected override bool RunFeature(List header, string[] item) 32 | { 33 | switch (_logFile) 34 | { 35 | case EnumLogFile.NCSA: 36 | break; 37 | case EnumLogFile.MSIISLOG: 38 | break; 39 | case EnumLogFile.W3CEXT: 40 | RunW3cext(header, item); 41 | break; 42 | } 43 | 44 | return true; 45 | } 46 | 47 | protected override bool RunFeature(string id,List header, string[] item) 48 | { 49 | switch (_logFile) 50 | { 51 | case EnumLogFile.NCSA: 52 | break; 53 | case EnumLogFile.MSIISLOG: 54 | break; 55 | case EnumLogFile.W3CEXT: 56 | RunW3cext(id,header, item); 57 | break; 58 | } 59 | 60 | return true; 61 | } 62 | 63 | 64 | private void RunW3cext(List header, string[] item) 65 | { 66 | int index = header.IndexOf("date"); 67 | int index2 = header.IndexOf("time"); 68 | int index3 = header.IndexOf("cs-uri-stem"); 69 | int index4 = header.IndexOf("time-taken"); 70 | 71 | if (index == -1 || index2== -1|| index3== -1|| index4==-1) 72 | return; 73 | 74 | string key1 = item[index]; 75 | string key2 = item[index2]; 76 | string key = string.Format("{0} {1}", key1, key2); 77 | 78 | string data1; 79 | if (index3 > 0) 80 | data1 = item[index3]; 81 | else 82 | data1 = string.Empty; 83 | string data2; 84 | if (index4 > 0) 85 | data2 = item[index4]; 86 | else 87 | data2 = string.Empty; 88 | 89 | if (!string.IsNullOrEmpty(data1) && data1 != "-" && !string.IsNullOrEmpty(data2) && data2 != "-") 90 | { 91 | if (!_logs["TimeTaken"].Colls.ContainsKey(key)) 92 | { 93 | _logs["TimeTaken"].Colls.Add(key, new WebLog(String.Format("{0};{1}", data1, Guid.NewGuid().ToString()), data2)); 94 | } 95 | else 96 | { 97 | _logs["TimeTaken"].Colls[key].Items.Add(String.Format("{0};{1}", data1, Guid.NewGuid().ToString()), data2); 98 | } 99 | } 100 | 101 | } 102 | 103 | private void RunW3cext(string id,List header, string[] item) 104 | { 105 | int index1 = header.IndexOf("cs-uri-stem"); 106 | int index2 = header.IndexOf("time-taken"); 107 | 108 | if (index1 == -1 || index2 == -1 ) 109 | return; 110 | 111 | string data1; 112 | if (index1 > 0) 113 | data1 = item[index1]; 114 | else 115 | data1 = string.Empty; 116 | string data2; 117 | if (index2 > 0) 118 | data2 = item[index2]; 119 | else 120 | data2 = string.Empty; 121 | 122 | string path = String.Format("{0}\\Temp\\{1}\\", Environment.CurrentDirectory, id); 123 | if (!Directory.Exists(path)) 124 | Directory.CreateDirectory(path); 125 | 126 | if (!string.IsNullOrEmpty(data1) && data1 != "-" && !string.IsNullOrEmpty(data2) && data2 != "-") 127 | { 128 | FeatureLogFile logFile = new FeatureLogFile(); 129 | string timeTakenFile = String.Format("{0}{1}-TimeTaken.tmp", path, _featureName.ToString()); 130 | logFile.LogFile = timeTakenFile; 131 | logFile.InsertData(data1, data2); 132 | } 133 | 134 | } 135 | 136 | protected override bool RunSynchFeatureData(Dictionary newItem) 137 | { 138 | bool success = false; 139 | try 140 | { 141 | foreach (KeyValuePair pair in newItem) 142 | { 143 | if (pair.Key == "TimeTaken") 144 | { 145 | foreach (KeyValuePair pair2 in pair.Value.Colls) 146 | { 147 | if (!_logs[pair.Key].Colls.ContainsKey(pair2.Key)) 148 | _logs[pair.Key].Colls.Add(pair2.Key, pair2.Value); 149 | } 150 | } 151 | } 152 | //IndihiangHelper.DumpToFile(_parserId.ToString(), String.Format("{0}.txt", _featureName), _logs["TimeTaken"].Colls); 153 | success = true; 154 | } 155 | catch (Exception err) 156 | { 157 | System.Diagnostics.Debug.WriteLine(String.Format("Error Synch: {0}", err.Message)); 158 | } 159 | return success; 160 | } 161 | 162 | protected override void DumpToFile(StreamWriter sw) 163 | { 164 | try 165 | { 166 | foreach (KeyValuePair pair in _logs) 167 | { 168 | if (pair.Key == "TimeTaken" ) 169 | { 170 | foreach (KeyValuePair pair2 in pair.Value.Colls) 171 | { 172 | foreach (KeyValuePair pair3 in pair2.Value.Items) 173 | { 174 | string data = String.Format("{0};{1};{2}", pair2.Key, pair3.Key, pair3.Value); 175 | sw.WriteLine(data); 176 | } 177 | } 178 | } 179 | 180 | } 181 | } 182 | catch (Exception err) 183 | { 184 | System.Diagnostics.Debug.WriteLine(String.Format("Error DumpToFile: {0}", err.Message)); 185 | } 186 | } 187 | } 188 | } 189 | -------------------------------------------------------------------------------- /Indihiang/DomainObject/W3cExtendedLog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Pe.Indhiang.Framework.Core.DomainObject 4 | { 5 | public class W3cExtendedLog 6 | { 7 | private string _date; 8 | private string _time; 9 | private string _c_ip; 10 | private string _cs_username; 11 | private string _s_sitename; 12 | private string _s_computername; 13 | private string _s_ip; 14 | private string _s_port; 15 | private string _cs_method; 16 | private string _cs_uri_stem; 17 | private string _cs_uri_query; 18 | private string _cs_status; 19 | private string _sc_win32_status; 20 | private string _sc_bytes; 21 | private string _time_taken; 22 | private string _cs_version; 23 | private string _cs_host; 24 | private string _cs_user_agent; 25 | private string _cs_cookie; 26 | private string _cs_referer; 27 | 28 | public string LogDate 29 | { 30 | get 31 | { 32 | return _date; 33 | } 34 | set 35 | { 36 | if (_date == value) 37 | return; 38 | _date = value; 39 | } 40 | } 41 | public string LogTime 42 | { 43 | get 44 | { 45 | return _time; 46 | } 47 | set 48 | { 49 | if (_time == value) 50 | return; 51 | _time = value; 52 | } 53 | } 54 | public string ClientIP 55 | { 56 | get 57 | { 58 | return _c_ip; 59 | } 60 | set 61 | { 62 | if (_c_ip == value) 63 | return; 64 | _c_ip = value; 65 | } 66 | } 67 | public string UserName 68 | { 69 | get 70 | { 71 | return _cs_username; 72 | } 73 | set 74 | { 75 | if (_cs_username == value) 76 | return; 77 | _cs_username = value; 78 | } 79 | } 80 | public string SiteName 81 | { 82 | get 83 | { 84 | return _s_sitename; 85 | } 86 | set 87 | { 88 | if (_s_sitename == value) 89 | return; 90 | _s_sitename = value; 91 | } 92 | } 93 | public string ComputerName 94 | { 95 | get 96 | { 97 | return _s_computername; 98 | } 99 | set 100 | { 101 | if (_s_computername == value) 102 | return; 103 | _s_computername = value; 104 | } 105 | } 106 | public string ServerIP 107 | { 108 | get 109 | { 110 | return _s_ip; 111 | } 112 | set 113 | { 114 | if (_s_ip == value) 115 | return; 116 | _s_ip = value; 117 | } 118 | } 119 | public string Port 120 | { 121 | get 122 | { 123 | return _s_port; 124 | } 125 | set 126 | { 127 | if (_s_port == value) 128 | return; 129 | _s_port = value; 130 | } 131 | } 132 | public string Method 133 | { 134 | get 135 | { 136 | return _cs_method; 137 | } 138 | set 139 | { 140 | if (_cs_method == value) 141 | return; 142 | _cs_method = value; 143 | } 144 | } 145 | public string UriStem 146 | { 147 | get 148 | { 149 | return _cs_uri_stem; 150 | } 151 | set 152 | { 153 | if (_cs_uri_stem == value) 154 | return; 155 | _cs_uri_stem = value; 156 | } 157 | } 158 | public string UriQuery 159 | { 160 | get 161 | { 162 | return _cs_uri_query; 163 | } 164 | set 165 | { 166 | if (_cs_uri_query == value) 167 | return; 168 | _cs_uri_query = value; 169 | } 170 | } 171 | public string Status 172 | { 173 | get 174 | { 175 | return _cs_status; 176 | } 177 | set 178 | { 179 | if (_cs_status == value) 180 | return; 181 | _cs_status = value; 182 | } 183 | } 184 | public string Win32Status 185 | { 186 | get 187 | { 188 | return _sc_win32_status; 189 | } 190 | set 191 | { 192 | if (_sc_win32_status == value) 193 | return; 194 | _sc_win32_status = value; 195 | } 196 | } 197 | public string Bytes 198 | { 199 | get 200 | { 201 | return _sc_bytes; 202 | } 203 | set 204 | { 205 | if (_sc_bytes == value) 206 | return; 207 | _sc_bytes = value; 208 | } 209 | } 210 | public string TimeTaken 211 | { 212 | get 213 | { 214 | return _time_taken; 215 | } 216 | set 217 | { 218 | if (_time_taken == value) 219 | return; 220 | _time_taken = value; 221 | } 222 | } 223 | public string Version 224 | { 225 | get 226 | { 227 | return _cs_version; 228 | } 229 | set 230 | { 231 | if (_cs_version == value) 232 | return; 233 | _cs_version = value; 234 | } 235 | } 236 | public string Host 237 | { 238 | get 239 | { 240 | return _cs_host; 241 | } 242 | set 243 | { 244 | if (_cs_host == value) 245 | return; 246 | _cs_host = value; 247 | } 248 | } 249 | public string UserAgent 250 | { 251 | get 252 | { 253 | return _cs_user_agent; 254 | } 255 | set 256 | { 257 | if (_cs_user_agent == value) 258 | return; 259 | _cs_user_agent = value; 260 | } 261 | } 262 | public string Cookie 263 | { 264 | get 265 | { 266 | return _cs_cookie; 267 | } 268 | set 269 | { 270 | if (_cs_cookie == value) 271 | return; 272 | _cs_cookie = value; 273 | } 274 | } 275 | public string Referer 276 | { 277 | get 278 | { 279 | return _cs_referer; 280 | } 281 | set 282 | { 283 | if (_cs_referer == value) 284 | return; 285 | _cs_referer = value; 286 | } 287 | } 288 | 289 | public W3cExtendedLog() { } 290 | } 291 | } 292 | --------------------------------------------------------------------------------