ICQ OSCAR protocol is used by 50+ million clients worldwide. It is proprietary and has no public specification. Unofficial implementations of OSCAR ICQ client were built using reverse engineering.

Project aims
  • Build fully managed OSCAR ICQ protocol client library with C#
  • Expand participant's experience in the client-server communication architecture of huge network system
  • Practice team development skills!
I strongly invite engaged .NET developers to join the project.

ICQ and .NET
The only managed libraries for ICQ protocol I found were NOscar and OscarLib. As far as I tested them, they are either very old or provide very limited functionality and contains a lot of mocks and not implemented features. Furthermore, the latest OscarLib's SVN source (links here: seems to be unavailable.

I grabbed the last Miranda IM sources (including ICQ protocol plugin written with C++) and started to explore the details. The basic idea is to port that Miranda library to C#, making it more .NET-friendly. The ideological difference is vast, but the first target is to make it simply work the same. After that, It would be much easier to refactor that plain managed code according to the best .NET standards and technologies.

What is already done
  • Translate most of #define constants into enumerations
  • Implement Packet, TLV, TLV-Chain and SNAC-Header classes
  • Implement Stream and String class extensions for reading special types
  • Isolated session variables into Session class
  • Implement message processing thread (to distinguish message with Channel, Family and Sub-type and call the appropriate handler)
  • Implement Authorization-family message handler
  • Implement Close-family message handler
  • (Partly) Implement Service-family messages handler
  • (Partly) Implement Buddy-family messages handler
  • (Partly) Implement Location-family messages handler
  • ...

What needs to be done
  • Finish Rates operating (partly ported)
  • Finish Cookie handling (partly ported)
  • Finish Location-family messages handler
  • Finish Service-family messages handler
  • Implement SSI (Server-Side contact-list etc.) and ServerCList-family handler
  • Implement Message-family messages handler
  • Implement Lookup-family messages handler
  • Implement Status-family messages handler
  • Implement Ping-family messages handler
  • Implement Error-family messages handler
  • ...

Last edited Jan 31, 2012 at 2:50 PM by sersel, version 11