26 Nisan 2010 Pazartesi

MSISDN Yönlendirme (MSISDN Forwarding) Java Kod Örneği

MSISDN nedir diye soruyorsanız, muhtemelen bu makale size uygun değil :). Yine de wikiye bir göz atın..
http://tr.wikipedia.org/wiki/MSISDN

Muhtemelen bir WAP uygulaması geliştiriyorsunuz ve operatörünüz (örnek: Turkcell) uygulamanıza msisdn yönlendirmesi (msisdn forwarding) yapıyor. Bu durumda MSISDN'i HTTP başlıklarından okumanız gerekmekte. Kullanacağınız başlık bir çerez (cookie) olarak yer alan User-Identity-Forward-msisdn.

905301234567 için User-Identity-Forward-msisdn içeren örnek bir çerez:
Cookie: User-Identity-Forward-msisdn=393035333031323334353637;...


Buna göre Java için örnek servlet şu şekilde:


import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @author aLi -- http://kodornegi.blogspot.com
*/
public class MsisdnOrnekServlet extends HttpServlet {

private static final long serialVersionUID = -6971624334249419092L;

private static String hex2ascii(String s) {
StringBuilder ascii = new StringBuilder();
for (int i = 0; i < s.length(); i+=2) {
int c = Integer.parseInt(s.substring(i, Math.min(i+2, s.length())), 16);
ascii.append(c == 0 ? '?' : (char) c);
}
return ascii.toString();
}

private static String getMsisdnFromCookie(HttpServletRequest request, boolean msisdnHex) {
String msisdn = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i] != null) {
if ("User-Identity-Forward-msisdn".equalsIgnoreCase(cookies[i].getName())) {
msisdn = msisdnHex ? hex2ascii(cookies[i].getValue()) : cookies[i].getValue();
break;
}
}
}
}
return msisdn;
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String msisdn = getMsisdnFromCookie(request, true);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String msisdn = getMsisdnFromCookie(request, true);
}
}


Eğer MSISDN, onaltılı (hexadecimal) sayı düzeninde yönlendirilmiyorsa bu durumda, yukarıdaki kodda doGet ve doPost metodları içinde
String msisdn = getMsisdnFromCookie(request, true);

satırlarını şu şekilde değiştirmeniz gerekiyor:
String msisdn = getMsisdnFromCookie(request, false);


SSL (HTTPS)

Eğer uygulamanız SSL (HTTPS üzerinde) çalışıyorsa bu durumda, operatörünüzün MSISDN yönlendirmesi çalışmayacaktır. Çünkü HTTP başlıklarına MSISDN'i ekleyecek olan WAP Gateway, bir HTTP proxy'dir ve istemci (kullanıcı) ile sunucu (uygulamanız) arasındaki iletişimi görüntüleyemez / değiştiremez. Ancak bu durumun çözümü de yok değil.

1. Kullanıcı HTTP sayfanızı açmak için istek gönderir. (Eğer anasayfanız HTTPS ise HTTP bir sayfaya yönlendirmeyi düşünebilirsiniz. Aşağıda SecureServlet'te MSISDN olmadığı durumda NonSecureServlet'e çevrilmesi yöntemini de kullanabilirsiniz.)
2. Operatör tarafından uygulamanıza yönlendirilen MSISDN, HTTP session'a kaydedilir.
3. HTTP yönlendirme metodları kullanılarak, istek HTTPS sayfaya yönlendirilir.
4. HTTPS sayfada artık MSISDN, session içinde yer alır.

İlk 3 adım için NonSecureServlet'i örnek olarak alabilirsiniz:


import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @author aLi -- http://kodornegi.blogspot.com
*/
public class NonSecureServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String msisdn = getMsisdnFromCookie(request, true);
request.getSession().setAttribute("MSISDN", msisdn);
response.sendRedirect("https://localhost/secure?redirected=1");
}
}



MSISDN'i almak için HTTPS üzerinde çalışan SecureServlet:


import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @author aLi -- http://kodornegi.blogspot.com
*/
public class SecureServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
String msisdn = (String) request.getSession().getAttribute("MSISDN");
if (msisdn == null) {
String redirected = request.getParameter("redirected");
if ("1".equals(redirected)) {
// Zaten NonSecureServlet'ten yönlendirilmiş. Msisdn yok..
response.setContentType("text/plain");
OutputStream os = response.getOutputStream();
os.write(("msisdn yok").getBytes());
os.close();
} else {
response.sendRedirect("http://localhost/nonsecure");
}
} else {
response.setContentType("text/plain");
OutputStream os = response.getOutputStream();
os.write(("msisdn: " + msisdn).getBytes());
os.close();
}
}
}

8 Nisan 2010 Perşembe

Eposta (Email) Adres Doğruluğu Kontrolü Java Kod Örneği

Elektronik posta adreslerinin regular expression kullanılarak doğrulanmasını sağlayan Java kod örneği.. Bu kod, sadece sözdizimi (syntax) kontrolü yapmaktadır, dolayısıyla gerçekte böyle bir eposta adresi olup olmadığını göstermez.


import java.util.regex.Pattern;

/**
* @author aLi -- http://kodornegi.blogspot.com
*/
public class PatternOrnek {

private static final Pattern epostaPattern = Pattern.compile("^\\w[\\w\\.-]*@([\\w\\-]+\\.)+[a-z]{2,6}$");

public static void main(String[] args) {
String eposta = "abc@def.com";
if (eposta == null || !epostaPattern.matcher(eposta).matches()) {
System.out.println("Geçersiz eposta adresi!");
} else {
System.out.println("Geçerli eposta adresi.");
}
}
}

5 Nisan 2010 Pazartesi

Mime Multipart içindeki dosyaların ayrıştırılması Java kod örneği


MimeBodyPart mbp = new MimeBodyPart(new FileInputStream("mime.txt"));
MimeMultipart mmp = (MimeMultipart) mbp.getContent();
for (int i = 0; i < mmp.getCount(); i++) {
BodyPart parca = mmp.getBodyPart(i);
System.out.println(i + " " + parca.getFileName() + " / " + parca.getContentType() + " / " + parca.getContent().getClass());
// Dosyaların yazılacağı klasör..
File klasor = new File("cikti");
klasor.mkdirs();
FileOutputStream fos = new FileOutputStream(new File(klasor, parca.getFileName()));
if (parca.getContent() instanceof String) {
fos.write(((String)parca.getContent()).getBytes());
} else {
InputStream is = (InputStream) parca.getContent();
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
is.close();
}
fos.close();
}

8 Şubat 2010 Pazartesi

Turkcell HandleNfRequest Web Servisi C# kod örneği

Abonelere iletilen (MT) SMS mesajların gönderim durumlarının Turkcell tarafından üçüncü parti firmalara yönlendirildiği HandleNfRequest web servisinin C# kod örneği..


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

namespace WebService1
{
[WebService(Namespace = "http://www.turkcell.com.tr/notfrouter/webservices/NfRequestHandler")]
public class NfWebService : System.Web.Services.WebService, INfRequestHandlerPort
{

[WebMethod]
public NfResponse[] handleNfRequest(NfHeader NfHeader, Object[] NfRequestArray)
{
System.Diagnostics.Debug.WriteLine("NfHeader: " + NfHeader);
System.Diagnostics.Debug.WriteLine("NfRequestArray: " + NfRequestArray);
System.Diagnostics.Debug.WriteLine("NfRequestArray.Length: " + NfRequestArray.Length);
NfResponse[] nfResponses = new NfResponse[NfRequestArray.Length];
for (int i = 0; i < NfRequestArray.Length; i++) {
NfRequest nfRequest = (NfRequest)NfRequestArray[i];
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"]: " + nfRequest);
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"].dscts: " + nfRequest.dscts);
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"].msgId: " + nfRequest.msgId);
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"].msisdn: " + nfRequest.msisdn);
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"].scts: " + nfRequest.scts);
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"].serviceId: " + nfRequest.serviceId);
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"].statusCode: " + nfRequest.statusCode);
System.Diagnostics.Debug.WriteLine("nfRequest["+i+"].statusDesc: " + nfRequest.statusDesc);
/* @TODO */
/* DB ye kayıt, email atma vb. işlemler sonradan yapılmak üzere bir kuyruğa bu noktada atılabilir. */
NfResponse nfResponse = new NfResponse();
nfResponse.statusCode = 0;
nfResponse.errorCode = null;
nfResponse.errorDescription = null;
nfResponses[i] = nfResponse;
}
System.Diagnostics.Debug.WriteLine("nfResponses: " + nfResponses);
System.Diagnostics.Debug.WriteLine("nfResponses.Length: " + nfResponses.Length);
return nfResponses;
}
}
}

Microsoft Visual Web Developer 2008 üzerinde geliştirilmiş projenin bütün kaynak kodları için..
http://hotfile.com/dl/27679928/b1664db/WebService1.rar.html