Faits: Faits: A. G._, né en 1955, a travaillé en qualité de magasinier au service de l'entreprise C._ et S._ SA. Parallèlement, il a occupé, à temps partiel, un emploi de placeur et contrôleur au service de l'entreprise G._. Souffrant de douleurs cervicales et lombaires, il a quitté son emploi de magasinier et s'est annoncé à l'assurance-invalidité le 25 mai 1999. Dans ses rapports des 4 octobre et 21 décembre 1999, le docteur V._, médecin traitant, a fait état de cervicalgies sur discarthrose C5-C6, de lombalgies sur discopathies L3-L4 et L4-L5, d'une volumineuse hernie discale postéro-latérale L4-L5, d'arthrose L5-S1, d'une HTA labile et d'obésité. Selon ce médecin, la capacité de travail du patient est nulle dans l'ancienne activité de magasinier, tandis qu'un travail à mi-temps avec un rendement prévisible de 100 % demeure exigible dans un emploi adapté. Il a précisé que le patient ne devrait pas s'exposer au froid, au bruit et aux produits chimiques et poussières, ou rester immobile de façon prolongée, ou porter des charges pesant plus de 5 à 6 kg. L'Office cantonal de l'assurance-invalidité du canton de Genève (l'offfice AI) a confié un mandat d'expertise au Centre d'intégration professionnelle de l'assurance-invalidité de Genève (COPAI). A l'issue d'un stage de huit semaines, les responsables du COPAI ont estimé que l'assuré pouvait être réinséré dans le circuit économique normal, où il pourrait exercer une activité légère autorisant les changements de position. Sa capacité de travail y serait de 56 %, correspondant à six heures de travail quotidien avec un rendement de 75 % (rapports du docteur L._, du 7 février 2001, et du directeur du COPAI, T._, du 13 février 2001). L'assuré a contesté le bien-fondé de cette évaluation, alléguant qu'elle ne tenait pas compte de ses souffrances. Par décision du 13 décembre 2001, l'office AI a nié le droit de l'assuré à des mesures de réadaptation d'ordre professionnel, nonobstant le taux d'invalidité de 55 %, motif pris que ces mesures étaient vouées à l'échec. Par une seconde décision du 25 avril 2002, l'office AI a alloué une demi-rente d'invalidité à dater du 1er février 2000. Par décision du 13 décembre 2001, l'office AI a nié le droit de l'assuré à des mesures de réadaptation d'ordre professionnel, nonobstant le taux d'invalidité de 55 %, motif pris que ces mesures étaient vouées à l'échec. Par une seconde décision du 25 avril 2002, l'office AI a alloué une demi-rente d'invalidité à dater du 1er février 2000. B. G._ a recouru contre la décision du 25 avril 2002 en concluant au versement d'une rente entière d'invalidité. Par jugement du 17 mars 2004, le Tribunal cantonal des assurances sociales du canton de Genève a rejeté le recours formé contre la décision du 25 avril 2002 et constaté que la décision du 13 décembre 2001 était entrée en force. Par jugement du 17 mars 2004, le Tribunal cantonal des assurances sociales du canton de Genève a rejeté le recours formé contre la décision du 25 avril 2002 et constaté que la décision du 13 décembre 2001 était entrée en force. C. G._ interjette recours de droit administratif contre ce jugement. A titre principal, il demande au Tribunal fédéral des assurances d'en constater la nullité, avec suite de dépens. Subsidiairement, le recourant invite la Cour de céans à constater que son droit d'être jugé dans un délai raisonnable n'a pas été respecté; il conclut par ailleurs au versement d'une rente entière d'invalidité depuis le 22 février 2000, avec intérêts. Plus subsidiairement, il demande le renvoi de la cause à la juridiction cantonale. L'intimé conclut au rejet du recours. L'Office fédéral des assurances sociales a renoncé à se déterminer. 