//입력한 위도 경도에서 사용 가능한 인증서 표시하는 함수 private void addListViewEnabledRegion(double lat, double lon) { double distance; double bearing; double relative_angle; double x; double y; double a; Dot2CertificateInfo certInfoForRegion = new Dot2CertificateInfo(); //현재 리스트 순서대로 유효지역 확인 for (int i = 0; i < this.listView.Items.Count; i++) { this.listView.Items[i].SubItems[5].Text = ""; //기존의 enabled region 표시 제거 byte[] certValue = File.ReadAllBytes(fileForePath + this.listView.Items[i].SubItems[1].Text); //현재 리스트의 인증서 파일 내용 읽어오기 DecodeDot2Certificate(certValue, certValue.Length, ref certInfoForRegion); //인증서 파일 분석 Dot2CircularRegion circle = certInfoForRegion.valid_region.circular; distance = gn_GetDistanceBetweenPoints(lat, lon, (double)circle.center.lat / 10000000, (double)circle.center.lon / 10000000); bearing = gn_GetBearingBetweenPoints(lat, lon, (double)circle.center.lat / 10000000, (double)circle.center.lon / 10000000); relative_angle = bearing - 360; x = distance * Math.Cos(relative_angle * Math.PI / 180); y = distance * Math.Sin(relative_angle * Math.PI / 180); a = circle.radius; //비교하며 표기 if ((1 - Math.Pow(x / a, 2) - Math.Pow(y / a, 2)) > 0) { this.listView.Items[i].SubItems[5].ForeColor = Color.Blue; this.listView.Items[i].SubItems[5].Text = "●"; } } }
//listview의 각 항목 클릭할 때 호출되는 함수 private void listView_MouseClick(object sender, MouseEventArgs e) { this.richTxtBox.Clear(); this.gridView.CellBorderStyle = DataGridViewCellBorderStyle.Single; int indexNum = this.listView.FocusedItem.Index; string path = fileForePath + this.listView.Items[indexNum].SubItems[1].Text; try { Dot2CertificateInfo certInfo = new Dot2CertificateInfo(); byte[] certValue = File.ReadAllBytes(path); //인증서 파일 내용 읽어오기 DecodeDot2Certificate(certValue, certValue.Length, ref certInfo); //인증서 분석 c 함수 if (certInfo.result == 0) //분석 성공시 { //table(gridview)에 인증서 분석 내용 출력 PrintDot2CertType(certInfo.cert_type); PrintDot2CertIssuerId(certInfo.issuer_id); PrintDot2CertValidPeriod(certInfo.valid_period); PrintDot2CertValidRegion(certInfo.valid_region); PrintDot2CertAppPermissions(certInfo.app_permissions); PrintDot2CertHash(certInfo.cert_hash); PrintDot2CertHashedid10(certInfo.cert_hashedid10); PrintDot2CertHashedid8(certInfo.cert_hashedid8); //richTextBox에 인증서 분석 full contents 출력 string[] fullContents = certInfo.contents_str.Split('\n'); for (int i = 0; i < fullContents.Length; i++) { this.richTxtBox.AppendText(fullContents[i] + "\r\n"); } mapLoadByCert(certInfo.valid_region); //지도 로드 } else //분석 실패시 { for (int i = 0; i < 2; i++) { for (int j = 0; j < 8; j++) { this.gridView[i, j].Value = ""; } } this.gridView[1, 0].Value = "인증서 분석에 실패했습니다."; } } catch (Exception ex) { MessageBox.Show(ex.StackTrace.ToString()); } }
public static extern void DecodeDot2Certificate(byte[] cert, int cert_size, ref Dot2CertificateInfo info);